Index: frontend/node_modules/@csstools/postcss-is-pseudo-class/CHANGELOG.md
===================================================================
--- frontend/node_modules/@csstools/postcss-is-pseudo-class/CHANGELOG.md	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@csstools/postcss-is-pseudo-class/CHANGELOG.md	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,48 @@
+# Changes to PostCSS Is Pseudo Class
+
+### 2.0.7 (July 8, 2022)
+
+- Fix case insensitive matching.
+
+### 2.0.6 (June 23, 2022)
+
+- Fix selector order with any pseudo element.
+- Fix transforming pseudo elements in `:is()`. Following the specification pseudo elements are invalid and we now transform to a known invalid pseudo element.
+- Add `onPseudoElement` plugin option. Set `{ onPseudoElement: 'warning' }` to receive warnings when this plugin encounters an unprocessable pseudo element.
+
+### 2.0.5 (June 4, 2022)
+
+- Update `@csstools/selector-specificity` (major)
+
+### 2.0.4 (May 17, 2022)
+
+- Fix selector order with `:before` and other pseudo elements.
+
+### 2.0.3 (May 11, 2022)
+
+- Use `@csstools/selector-specificity` for specificity calculations.
+
+### 2.0.2 (April 4, 2022)
+
+- Improved : compound selector order with pseudo elements
+- Improved : selector specificity calculation.
+
+### 2.0.1 (March 4, 2022)
+
+- Preserve selector order as much as possible. Fixes issues where pseudo elements `::before` were moved.
+
+### 2.0.0 (January 31, 2022)
+
+- Remove `skip` flag in `onComplexSelectors` option.
+
+If a complex selector is encountered that has no known equivalent, it will always be skipped and preserved now.
+
+The previous behavior was to remove `:is()` even if that broke the selector.
+
+### 1.0.1 (January 17, 2022)
+
+- Fix selector order
+
+### 1.0.0 (January 13, 2022)
+
+- initial release
Index: frontend/node_modules/@csstools/postcss-is-pseudo-class/LICENSE.md
===================================================================
--- frontend/node_modules/@csstools/postcss-is-pseudo-class/LICENSE.md	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@csstools/postcss-is-pseudo-class/LICENSE.md	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,108 @@
+# CC0 1.0 Universal
+
+## Statement of Purpose
+
+The laws of most jurisdictions throughout the world automatically confer
+exclusive Copyright and Related Rights (defined below) upon the creator and
+subsequent owner(s) (each and all, an “owner”) of an original work of
+authorship and/or a database (each, a “Work”).
+
+Certain owners wish to permanently relinquish those rights to a Work for the
+purpose of contributing to a commons of creative, cultural and scientific works
+(“Commons”) that the public can reliably and without fear of later claims of
+infringement build upon, modify, incorporate in other works, reuse and
+redistribute as freely as possible in any form whatsoever and for any purposes,
+including without limitation commercial purposes. These owners may contribute
+to the Commons to promote the ideal of a free culture and the further
+production of creative, cultural and scientific works, or to gain reputation or
+greater distribution for their Work in part through the use and efforts of
+others.
+
+For these and/or other purposes and motivations, and without any expectation of
+additional consideration or compensation, the person associating CC0 with a
+Work (the “Affirmer”), to the extent that he or she is an owner of Copyright
+and Related Rights in the Work, voluntarily elects to apply CC0 to the Work and
+publicly distribute the Work under its terms, with knowledge of his or her
+Copyright and Related Rights in the Work and the meaning and intended legal
+effect of CC0 on those rights.
+
+1. Copyright and Related Rights. A Work made available under CC0 may be
+   protected by copyright and related or neighboring rights (“Copyright and
+   Related Rights”). Copyright and Related Rights include, but are not limited
+   to, the following:
+   1. the right to reproduce, adapt, distribute, perform, display, communicate,
+      and translate a Work;
+   2. moral rights retained by the original author(s) and/or performer(s);
+   3. publicity and privacy rights pertaining to a person’s image or likeness
+      depicted in a Work;
+   4. rights protecting against unfair competition in regards to a Work,
+      subject to the limitations in paragraph 4(i), below;
+   5. rights protecting the extraction, dissemination, use and reuse of data in
+      a Work;
+   6. database rights (such as those arising under Directive 96/9/EC of the
+      European Parliament and of the Council of 11 March 1996 on the legal
+      protection of databases, and under any national implementation thereof,
+      including any amended or successor version of such directive); and
+   7. other similar, equivalent or corresponding rights throughout the world
+      based on applicable law or treaty, and any national implementations
+      thereof.
+
+2. Waiver. To the greatest extent permitted by, but not in contravention of,
+   applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and
+   unconditionally waives, abandons, and surrenders all of Affirmer’s Copyright
+   and Related Rights and associated claims and causes of action, whether now
+   known or unknown (including existing as well as future claims and causes of
+   action), in the Work (i) in all territories worldwide, (ii) for the maximum
+   duration provided by applicable law or treaty (including future time
+   extensions), (iii) in any current or future medium and for any number of
+   copies, and (iv) for any purpose whatsoever, including without limitation
+   commercial, advertising or promotional purposes (the “Waiver”). Affirmer
+   makes the Waiver for the benefit of each member of the public at large and
+   to the detriment of Affirmer’s heirs and successors, fully intending that
+   such Waiver shall not be subject to revocation, rescission, cancellation,
+   termination, or any other legal or equitable action to disrupt the quiet
+   enjoyment of the Work by the public as contemplated by Affirmer’s express
+   Statement of Purpose.
+
+3. Public License Fallback. Should any part of the Waiver for any reason be
+   judged legally invalid or ineffective under applicable law, then the Waiver
+   shall be preserved to the maximum extent permitted taking into account
+   Affirmer’s express Statement of Purpose. In addition, to the extent the
+   Waiver is so judged Affirmer hereby grants to each affected person a
+   royalty-free, non transferable, non sublicensable, non exclusive,
+   irrevocable and unconditional license to exercise Affirmer’s Copyright and
+   Related Rights in the Work (i) in all territories worldwide, (ii) for the
+   maximum duration provided by applicable law or treaty (including future time
+   extensions), (iii) in any current or future medium and for any number of
+   copies, and (iv) for any purpose whatsoever, including without limitation
+   commercial, advertising or promotional purposes (the “License”). The License
+   shall be deemed effective as of the date CC0 was applied by Affirmer to the
+   Work. Should any part of the License for any reason be judged legally
+   invalid or ineffective under applicable law, such partial invalidity or
+   ineffectiveness shall not invalidate the remainder of the License, and in
+   such case Affirmer hereby affirms that he or she will not (i) exercise any
+   of his or her remaining Copyright and Related Rights in the Work or (ii)
+   assert any associated claims and causes of action with respect to the Work,
+   in either case contrary to Affirmer’s express Statement of Purpose.
+
+4. Limitations and Disclaimers.
+   1. No trademark or patent rights held by Affirmer are waived, abandoned,
+      surrendered, licensed or otherwise affected by this document.
+   2. Affirmer offers the Work as-is and makes no representations or warranties
+      of any kind concerning the Work, express, implied, statutory or
+      otherwise, including without limitation warranties of title,
+      merchantability, fitness for a particular purpose, non infringement, or
+      the absence of latent or other defects, accuracy, or the present or
+      absence of errors, whether or not discoverable, all to the greatest
+      extent permissible under applicable law.
+   3. Affirmer disclaims responsibility for clearing rights of other persons
+      that may apply to the Work or any use thereof, including without
+      limitation any person’s Copyright and Related Rights in the Work.
+      Further, Affirmer disclaims responsibility for obtaining any necessary
+      consents, permissions or other rights required for any use of the Work.
+   4. Affirmer understands and acknowledges that Creative Commons is not a
+      party to this document and has no duty or obligation with respect to this
+      CC0 or use of the Work.
+
+For more information, please see
+http://creativecommons.org/publicdomain/zero/1.0/.
Index: frontend/node_modules/@csstools/postcss-is-pseudo-class/README.md
===================================================================
--- frontend/node_modules/@csstools/postcss-is-pseudo-class/README.md	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@csstools/postcss-is-pseudo-class/README.md	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,251 @@
+# PostCSS Is Pseudo [<img src="https://postcss.github.io/postcss/logo.svg" alt="PostCSS" width="90" height="90" align="right">][postcss]
+
+[![NPM Version][npm-img]][npm-url]
+[![CSS Standard Status][css-img]][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 Is Pseudo Class] lets you use the `:is` pseudo class function, following the
+[CSS Selector] specification.
+
+```pcss
+:is(input, button):is(:hover, :focus) {
+	order: 1;
+}
+```
+
+Becomes :
+
+```pcss
+input:hover {
+	order: 1;
+}
+input:focus {
+	order: 1;
+}
+button:hover {
+	order: 1;
+}
+button:focus {
+	order: 1;
+}
+```
+
+## Usage
+
+Add [PostCSS Is Pseudo Class] to your project:
+
+```bash
+npm install @csstools/postcss-is-pseudo-class --save-dev
+```
+
+Use [PostCSS Is Pseudo Class] as a [PostCSS] plugin:
+
+```js
+import postcss from 'postcss';
+import postcssIsPseudoClass from '@csstools/postcss-is-pseudo-class';
+
+postcss([
+  postcssIsPseudoClass(/* pluginOptions */)
+]).process(YOUR_CSS /*, processOptions */);
+```
+
+[PostCSS Is Pseudo Class] runs in all Node environments, with special instructions for:
+
+| [Node](INSTALL.md#node) | [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
+postcss([
+  postcssIsPseudoClass({ preserve: true })
+]).process(YOUR_CSS /*, processOptions */);
+```
+
+```pcss
+:is(input, button):is(:hover, :focus) {
+	order: 1;
+}
+```
+
+Becomes :
+
+```pcss
+input:hover {
+	order: 1;
+}
+input:focus {
+	order: 1;
+}
+button:hover {
+	order: 1;
+}
+button:focus {
+	order: 1;
+}
+:is(input, button):is(:hover, :focus) {
+	order: 1;
+}
+```
+
+### specificityMatchingName
+
+The `specificityMatchingName` option allows you to change to selector used to adjust specificity.
+The default value is `does-not-exist`.
+If this is an actual class, id or tag name in your code, you will need to set a different option here.
+
+See how `:not` is used to modify [specificity](#specificity).
+
+```js
+postcss([
+  postcssIsPseudoClass({ specificityMatchingName: 'something-random' })
+]).process(YOUR_CSS /*, processOptions */);
+```
+
+```pcss
+:is(.button, button):hover {
+	order: 7;
+}
+```
+
+Becomes :
+
+```pcss
+.button:hover {
+	order: 7;
+}
+
+button:not(.something-random):hover {
+	order: 7;
+}
+```
+
+### onComplexSelector
+
+Warn on complex selectors in `:is` pseudo class functions.
+
+```js
+postcss([
+  postcssIsPseudoClass({ onComplexSelector: 'warning' })
+]).process(YOUR_CSS /*, processOptions */);
+```
+
+### onPseudoElement
+
+Warn when pseudo elements are used in `:is` pseudo class functions.
+
+⚠️ Pseudo elements are always invalid and will be transformed to `::-csstools-invalid-<pseudo-name>`.
+
+```js
+postcss([
+  postcssIsPseudoClass({ onPseudoElement: 'warning' })
+]).process(YOUR_CSS /*, processOptions */);
+```
+
+```css
+:is(::after):hover {
+	order: 1.0;
+}
+
+/* becomes */
+
+::-csstools-invalid-after:hover {
+	order: 1.0;
+}
+```
+
+## ⚠️ Known shortcomings
+
+### Specificity
+
+`:is` takes the specificity of the most specific list item.
+We can increase specificity with `:not` selectors, but we can't decrease it.
+
+Converted selectors are ensured to have the same specificity as `:is` for the most important bit.
+Less important bits can have higher specificity that `:is`.
+
+Before :
+
+[specificity: 0, 2, 0](https://polypane.app/css-specificity-calculator/#selector=%3Ais(%3Ahover%2C%20%3Afocus)%3Ais(.button%2C%20button))
+
+```pcss
+:is(:hover, :focus):is(.button, button) {
+	order: 7;
+}
+```
+
+After :
+
+```pcss
+/* specificity: [0, 2, 0] */
+.button:hover {
+	order: 7;
+}
+
+/* specificity: [0, 2, 1] */
+/* last bit is higher than it should be, but middle bit matches */
+button:not(.does-not-exist):hover {
+	order: 7;
+}
+
+/* specificity: [0, 2, 0] */
+.button:focus {
+	order: 7;
+}
+
+/* specificity: [0, 2, 1] */
+/* last bit is higher than it should be, but middle bit matches */
+button:not(.does-not-exist):focus {
+	order: 7;
+}
+```
+
+### Complex selectors
+
+Before :
+
+
+```pcss
+:is(.alpha > .beta) ~ :is(:focus > .beta) {
+	order: 2;
+}
+```
+
+After :
+
+```pcss
+.alpha > .beta ~ :focus > .beta {
+	order: 2;
+}
+```
+
+_this is a different selector than expected as `.beta ~ :focus` matches `.beta` followed by `:focus`._<br>
+_avoid these cases._<br>
+_writing the selector without `:is()` is advised here_
+
+```pcss
+/* without is */
+.alpha:focus > .beta ~ .beta {
+	order: 2;
+}
+```
+
+If you have a specific pattern you can open an issue to discuss it.
+We can detect and transform some cases but can't generalize them into a single solution that tackles all of them. 
+
+[cli-url]: https://github.com/csstools/postcss-plugins/actions/workflows/test.yml?query=workflow/test
+[css-img]: https://cssdb.org/images/badges/is-pseudo-class.svg
+[css-url]: https://cssdb.org/#is-pseudo-class
+[discord]: https://discord.gg/bUadyRwkJS
+[npm-img]: https://img.shields.io/npm/v/@csstools/postcss-is-pseudo-class.svg
+[npm-url]: https://www.npmjs.com/package/@csstools/postcss-is-pseudo-class
+
+[CSS Selector]: https://www.w3.org/TR/selectors-4/#matches
+[PostCSS]: https://github.com/postcss/postcss
+[PostCSS Is Pseudo Class]: https://github.com/csstools/postcss-plugins/tree/main/plugins/postcss-is-pseudo-class
Index: frontend/node_modules/@csstools/postcss-is-pseudo-class/dist/index.cjs
===================================================================
--- frontend/node_modules/@csstools/postcss-is-pseudo-class/dist/index.cjs	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@csstools/postcss-is-pseudo-class/dist/index.cjs	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+"use strict";var e=require("postcss-selector-parser"),o=require("@csstools/selector-specificity");function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=s(e);function t(e,o){return n.default.isPseudoElement(e)?d.pseudoElement:d[o]}const d={universal:0,tag:1,pseudoElement:2,id:3,class:4,attribute:5,pseudo:6,selector:7,string:8,root:9,comment:10};function r(e,o,s,d){return e.flatMap((e=>{if(-1===e.indexOf(":-csstools-matches")&&-1===e.toLowerCase().indexOf(":is"))return e;const r=n.default().astSync(e);return r.walkPseudos((e=>{if(":is"===e.value.toLowerCase()&&e.nodes&&e.nodes.length&&"selector"===e.nodes[0].type&&0===e.nodes[0].nodes.length)return e.value=":not",void e.nodes[0].append(n.default.universal());if(":-csstools-matches"===e.value)if(!e.nodes||e.nodes.length){if(e.walkPseudos((e=>{if(n.default.isPseudoElement(e)){let o=e.value;if(o.startsWith("::-csstools-invalid-"))return;for(;o.startsWith(":");)o=o.slice(1);e.value=`::-csstools-invalid-${o}`,d()}})),1===e.nodes.length&&"selector"===e.nodes[0].type){if(1===e.nodes[0].nodes.length)return void e.replaceWith(e.nodes[0].nodes[0]);if(!e.nodes[0].some((e=>"combinator"===e.type)))return void e.replaceWith(...e.nodes[0].nodes)}1!==r.nodes.length||"selector"!==r.nodes[0].type||1!==r.nodes[0].nodes.length||r.nodes[0].nodes[0]!==e?function(e){return!(!e||!e.nodes||"selector"!==e.type||3!==e.nodes.length||!e.nodes[0]||"pseudo"!==e.nodes[0].type||":-csstools-matches"!==e.nodes[0].value||!e.nodes[1]||"combinator"!==e.nodes[1].type||"+"!==e.nodes[1].value||!e.nodes[2]||"pseudo"!==e.nodes[2].type||":-csstools-matches"!==e.nodes[2].value||!e.nodes[0].nodes||1!==e.nodes[0].nodes.length||"selector"!==e.nodes[0].nodes[0].type||!e.nodes[0].nodes[0].nodes||3!==e.nodes[0].nodes[0].nodes.length||!e.nodes[0].nodes[0].nodes||"combinator"!==e.nodes[0].nodes[0].nodes[1].type||">"!==e.nodes[0].nodes[0].nodes[1].value||!e.nodes[2].nodes||1!==e.nodes[2].nodes.length||"selector"!==e.nodes[2].nodes[0].type||!e.nodes[2].nodes[0].nodes||3!==e.nodes[2].nodes[0].nodes.length||!e.nodes[2].nodes[0].nodes||"combinator"!==e.nodes[2].nodes[0].nodes[1].type||">"!==e.nodes[2].nodes[0].nodes[1].value||(e.nodes[0].nodes[0].insertAfter(e.nodes[0].nodes[0].nodes[0],e.nodes[2].nodes[0].nodes[0].clone()),e.nodes[2].nodes[0].nodes[1].remove(),e.nodes[2].nodes[0].nodes[0].remove(),e.nodes[0].replaceWith(e.nodes[0].nodes[0]),e.nodes[2].replaceWith(e.nodes[2].nodes[0]),0))}(e.parent)||function(e){if(!e||!e.nodes)return!1;if("selector"!==e.type)return!1;if(2!==e.nodes.length)return!1;let o,s;return e.nodes[0]&&"pseudo"===e.nodes[0].type&&":-csstools-matches"===e.nodes[0].value?(o=0,s=1):e.nodes[1]&&"pseudo"===e.nodes[1].type&&":-csstools-matches"===e.nodes[1].value&&(o=1,s=0),!(!o||!e.nodes[s]||"selector"===e.nodes[s].type&&e.nodes[s].some((e=>"combinator"===e.type||n.default.isPseudoElement(e)))||(e.nodes[o].append(e.nodes[s].clone()),e.nodes[o].replaceWith(...e.nodes[o].nodes),e.nodes[s].remove(),0))}(e.parent)||("warning"===o.onComplexSelector&&s(),e.value=":is"):e.replaceWith(...e.nodes[0].nodes)}else e.remove()})),r.walk((e=>{"selector"===e.type&&"nodes"in e&&1===e.nodes.length&&"selector"===e.nodes[0].type&&e.replaceWith(e.nodes[0])})),r.walk((e=>{"nodes"in e&&function(e){if(!e||!e.nodes)return;const o=[];let s=[];for(let t=0;t<e.nodes.length;t++)"combinator"!==e.nodes[t].type?n.default.isPseudoElement(e.nodes[t])?(o.push(s),s=[e.nodes[t]]):s.push(e.nodes[t]):(o.push(s),o.push([e.nodes[t]]),s=[]);o.push(s);const d=[];for(let e=0;e<o.length;e++){const s=o[e];s.sort(((e,o)=>"selector"===e.type&&"selector"===o.type&&e.nodes.length&&o.nodes.length?t(e.nodes[0],e.nodes[0].type)-t(o.nodes[0],o.nodes[0].type):"selector"===e.type&&e.nodes.length?t(e.nodes[0],e.nodes[0].type)-t(o,o.type):"selector"===o.type&&o.nodes.length?t(e,e.type)-t(o.nodes[0],o.nodes[0].type):t(e,e.type)-t(o,o.type)));for(let e=0;e<s.length;e++)d.push(s[e])}for(let o=d.length-1;o>=0;o--)d[o].remove(),e.prepend(d[o])}(e)})),r.toString()})).filter((e=>!!e))}function l(e,s,t=0){const d=":not(#"+s.specificityMatchingName+")",r=":not(."+s.specificityMatchingName+")",c=":not("+s.specificityMatchingName+")";return e.flatMap((e=>{if(-1===e.toLowerCase().indexOf(":is"))return e;let i=!1;const a=[];if(n.default().astSync(e).walkPseudos((e=>{if(":is"!==e.value.toLowerCase()||!e.nodes||!e.nodes.length)return;if("selector"===e.nodes[0].type&&0===e.nodes[0].nodes.length)return;let s=e.parent;for(;s;){if(s.value&&":is"===s.value.toLowerCase()&&"pseudo"===s.type)return void(i=!0);s=s.parent}const n=o.selectorSpecificity(e),t=e.sourceIndex,l=t+e.toString().length,u=[];e.nodes.forEach((e=>{const s={start:t,end:l,option:""},i=o.selectorSpecificity(e);let a=e.toString().trim();const p=Math.max(0,n.a-i.a),f=Math.max(0,n.b-i.b),h=Math.max(0,n.c-i.c);for(let e=0;e<p;e++)a+=d;for(let e=0;e<f;e++)a+=r;for(let e=0;e<h;e++)a+=c;s.option=a,u.push(s)})),a.push(u)})),!a.length)return[e];let u=[];return function(...e){const o=[],s=e.length-1;function n(t,d){for(let r=0,l=e[d].length;r<l;r++){const l=t.slice(0);l.push(e[d][r]),d==s?o.push(l):n(l,d+1)}}return n([],0),o}(...a).forEach((o=>{let s="";for(let t=0;t<o.length;t++){var n;const d=o[t];s+=e.substring((null==(n=o[t-1])?void 0:n.end)||0,o[t].start),s+=":-csstools-matches("+d.option+")",t===o.length-1&&(s+=e.substring(o[t].end))}u.push(s)})),i&&t<10&&(u=l(u,s,t+1)),u})).filter((e=>!!e))}const c=e=>{const o={specificityMatchingName:"does-not-exist",...e||{}};return{postcssPlugin:"postcss-is-pseudo-class",Rule(e,{result:s}){if(!e.selector)return;if(-1===e.selector.toLowerCase().indexOf(":is"))return;let n=!1;const t=()=>{"warning"===o.onComplexSelector&&(n||(n=!0,e.warn(s,`Complex selectors in '${e.selector}' can not be transformed to an equivalent selector without ':is()'.`)))};let d=!1;const c=()=>{"warning"===o.onPseudoElement&&(d||(d=!0,e.warn(s,`Pseudo elements are not allowed in ':is()', unable to transform '${e.selector}'`)))};try{let s=!1;const n=[],d=r(l(e.selectors,{specificityMatchingName:o.specificityMatchingName}),{onComplexSelector:o.onComplexSelector},t,c);if(Array.from(new Set(d)).forEach((o=>{e.selectors.indexOf(o)>-1?n.push(o):(e.cloneBefore({selector:o}),s=!0)})),n.length&&s&&e.cloneBefore({selectors:n}),!o.preserve){if(!s)return;e.remove()}}catch(o){if(o.message.indexOf("call stack size exceeded")>-1)throw o;e.warn(s,`Failed to parse selector "${e.selector}"`)}}}};c.postcss=!0,module.exports=c;
Index: frontend/node_modules/@csstools/postcss-is-pseudo-class/dist/index.d.ts
===================================================================
--- frontend/node_modules/@csstools/postcss-is-pseudo-class/dist/index.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@csstools/postcss-is-pseudo-class/dist/index.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,9 @@
+import type { PluginCreator } from 'postcss';
+declare type pluginOptions = {
+    preserve?: boolean;
+    onComplexSelector?: 'warning';
+    onPseudoElement?: 'warning';
+    specificityMatchingName?: string;
+};
+declare const creator: PluginCreator<pluginOptions>;
+export default creator;
Index: frontend/node_modules/@csstools/postcss-is-pseudo-class/dist/index.mjs
===================================================================
--- frontend/node_modules/@csstools/postcss-is-pseudo-class/dist/index.mjs	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@csstools/postcss-is-pseudo-class/dist/index.mjs	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+import e from"postcss-selector-parser";import{selectorSpecificity as o}from"@csstools/selector-specificity";function s(o,s){return e.isPseudoElement(o)?n.pseudoElement:n[s]}const n={universal:0,tag:1,pseudoElement:2,id:3,class:4,attribute:5,pseudo:6,selector:7,string:8,root:9,comment:10};function t(o,n,t,d){return o.flatMap((o=>{if(-1===o.indexOf(":-csstools-matches")&&-1===o.toLowerCase().indexOf(":is"))return o;const r=e().astSync(o);return r.walkPseudos((o=>{if(":is"===o.value.toLowerCase()&&o.nodes&&o.nodes.length&&"selector"===o.nodes[0].type&&0===o.nodes[0].nodes.length)return o.value=":not",void o.nodes[0].append(e.universal());if(":-csstools-matches"===o.value)if(!o.nodes||o.nodes.length){if(o.walkPseudos((o=>{if(e.isPseudoElement(o)){let e=o.value;if(e.startsWith("::-csstools-invalid-"))return;for(;e.startsWith(":");)e=e.slice(1);o.value=`::-csstools-invalid-${e}`,d()}})),1===o.nodes.length&&"selector"===o.nodes[0].type){if(1===o.nodes[0].nodes.length)return void o.replaceWith(o.nodes[0].nodes[0]);if(!o.nodes[0].some((e=>"combinator"===e.type)))return void o.replaceWith(...o.nodes[0].nodes)}1!==r.nodes.length||"selector"!==r.nodes[0].type||1!==r.nodes[0].nodes.length||r.nodes[0].nodes[0]!==o?function(e){return!(!e||!e.nodes||"selector"!==e.type||3!==e.nodes.length||!e.nodes[0]||"pseudo"!==e.nodes[0].type||":-csstools-matches"!==e.nodes[0].value||!e.nodes[1]||"combinator"!==e.nodes[1].type||"+"!==e.nodes[1].value||!e.nodes[2]||"pseudo"!==e.nodes[2].type||":-csstools-matches"!==e.nodes[2].value||!e.nodes[0].nodes||1!==e.nodes[0].nodes.length||"selector"!==e.nodes[0].nodes[0].type||!e.nodes[0].nodes[0].nodes||3!==e.nodes[0].nodes[0].nodes.length||!e.nodes[0].nodes[0].nodes||"combinator"!==e.nodes[0].nodes[0].nodes[1].type||">"!==e.nodes[0].nodes[0].nodes[1].value||!e.nodes[2].nodes||1!==e.nodes[2].nodes.length||"selector"!==e.nodes[2].nodes[0].type||!e.nodes[2].nodes[0].nodes||3!==e.nodes[2].nodes[0].nodes.length||!e.nodes[2].nodes[0].nodes||"combinator"!==e.nodes[2].nodes[0].nodes[1].type||">"!==e.nodes[2].nodes[0].nodes[1].value||(e.nodes[0].nodes[0].insertAfter(e.nodes[0].nodes[0].nodes[0],e.nodes[2].nodes[0].nodes[0].clone()),e.nodes[2].nodes[0].nodes[1].remove(),e.nodes[2].nodes[0].nodes[0].remove(),e.nodes[0].replaceWith(e.nodes[0].nodes[0]),e.nodes[2].replaceWith(e.nodes[2].nodes[0]),0))}(o.parent)||function(o){if(!o||!o.nodes)return!1;if("selector"!==o.type)return!1;if(2!==o.nodes.length)return!1;let s,n;return o.nodes[0]&&"pseudo"===o.nodes[0].type&&":-csstools-matches"===o.nodes[0].value?(s=0,n=1):o.nodes[1]&&"pseudo"===o.nodes[1].type&&":-csstools-matches"===o.nodes[1].value&&(s=1,n=0),!(!s||!o.nodes[n]||"selector"===o.nodes[n].type&&o.nodes[n].some((o=>"combinator"===o.type||e.isPseudoElement(o)))||(o.nodes[s].append(o.nodes[n].clone()),o.nodes[s].replaceWith(...o.nodes[s].nodes),o.nodes[n].remove(),0))}(o.parent)||("warning"===n.onComplexSelector&&t(),o.value=":is"):o.replaceWith(...o.nodes[0].nodes)}else o.remove()})),r.walk((e=>{"selector"===e.type&&"nodes"in e&&1===e.nodes.length&&"selector"===e.nodes[0].type&&e.replaceWith(e.nodes[0])})),r.walk((o=>{"nodes"in o&&function(o){if(!o||!o.nodes)return;const n=[];let t=[];for(let s=0;s<o.nodes.length;s++)"combinator"!==o.nodes[s].type?e.isPseudoElement(o.nodes[s])?(n.push(t),t=[o.nodes[s]]):t.push(o.nodes[s]):(n.push(t),n.push([o.nodes[s]]),t=[]);n.push(t);const d=[];for(let e=0;e<n.length;e++){const o=n[e];o.sort(((e,o)=>"selector"===e.type&&"selector"===o.type&&e.nodes.length&&o.nodes.length?s(e.nodes[0],e.nodes[0].type)-s(o.nodes[0],o.nodes[0].type):"selector"===e.type&&e.nodes.length?s(e.nodes[0],e.nodes[0].type)-s(o,o.type):"selector"===o.type&&o.nodes.length?s(e,e.type)-s(o.nodes[0],o.nodes[0].type):s(e,e.type)-s(o,o.type)));for(let e=0;e<o.length;e++)d.push(o[e])}for(let e=d.length-1;e>=0;e--)d[e].remove(),o.prepend(d[e])}(o)})),r.toString()})).filter((e=>!!e))}function d(s,n,t=0){const r=":not(#"+n.specificityMatchingName+")",l=":not(."+n.specificityMatchingName+")",c=":not("+n.specificityMatchingName+")";return s.flatMap((s=>{if(-1===s.toLowerCase().indexOf(":is"))return s;let i=!1;const a=[];if(e().astSync(s).walkPseudos((e=>{if(":is"!==e.value.toLowerCase()||!e.nodes||!e.nodes.length)return;if("selector"===e.nodes[0].type&&0===e.nodes[0].nodes.length)return;let s=e.parent;for(;s;){if(s.value&&":is"===s.value.toLowerCase()&&"pseudo"===s.type)return void(i=!0);s=s.parent}const n=o(e),t=e.sourceIndex,d=t+e.toString().length,p=[];e.nodes.forEach((e=>{const s={start:t,end:d,option:""},i=o(e);let a=e.toString().trim();const u=Math.max(0,n.a-i.a),h=Math.max(0,n.b-i.b),f=Math.max(0,n.c-i.c);for(let e=0;e<u;e++)a+=r;for(let e=0;e<h;e++)a+=l;for(let e=0;e<f;e++)a+=c;s.option=a,p.push(s)})),a.push(p)})),!a.length)return[s];let p=[];return function(...e){const o=[],s=e.length-1;function n(t,d){for(let r=0,l=e[d].length;r<l;r++){const l=t.slice(0);l.push(e[d][r]),d==s?o.push(l):n(l,d+1)}}return n([],0),o}(...a).forEach((e=>{let o="";for(let t=0;t<e.length;t++){var n;const d=e[t];o+=s.substring((null==(n=e[t-1])?void 0:n.end)||0,e[t].start),o+=":-csstools-matches("+d.option+")",t===e.length-1&&(o+=s.substring(e[t].end))}p.push(o)})),i&&t<10&&(p=d(p,n,t+1)),p})).filter((e=>!!e))}const r=e=>{const o={specificityMatchingName:"does-not-exist",...e||{}};return{postcssPlugin:"postcss-is-pseudo-class",Rule(e,{result:s}){if(!e.selector)return;if(-1===e.selector.toLowerCase().indexOf(":is"))return;let n=!1;const r=()=>{"warning"===o.onComplexSelector&&(n||(n=!0,e.warn(s,`Complex selectors in '${e.selector}' can not be transformed to an equivalent selector without ':is()'.`)))};let l=!1;const c=()=>{"warning"===o.onPseudoElement&&(l||(l=!0,e.warn(s,`Pseudo elements are not allowed in ':is()', unable to transform '${e.selector}'`)))};try{let s=!1;const n=[],l=t(d(e.selectors,{specificityMatchingName:o.specificityMatchingName}),{onComplexSelector:o.onComplexSelector},r,c);if(Array.from(new Set(l)).forEach((o=>{e.selectors.indexOf(o)>-1?n.push(o):(e.cloneBefore({selector:o}),s=!0)})),n.length&&s&&e.cloneBefore({selectors:n}),!o.preserve){if(!s)return;e.remove()}}catch(o){if(o.message.indexOf("call stack size exceeded")>-1)throw o;e.warn(s,`Failed to parse selector "${e.selector}"`)}}}};r.postcss=!0;export{r as default};
Index: frontend/node_modules/@csstools/postcss-is-pseudo-class/dist/split-selectors/complex.d.ts
===================================================================
--- frontend/node_modules/@csstools/postcss-is-pseudo-class/dist/split-selectors/complex.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@csstools/postcss-is-pseudo-class/dist/split-selectors/complex.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,3 @@
+export default function complexSelectors(selectors: string[], pluginOptions: {
+    onComplexSelector?: 'warning';
+}, warnOnComplexSelector: () => void, warnOnPseudoElements: () => void): string[];
Index: frontend/node_modules/@csstools/postcss-is-pseudo-class/dist/split-selectors/complex/child-adjacent-child.d.ts
===================================================================
--- frontend/node_modules/@csstools/postcss-is-pseudo-class/dist/split-selectors/complex/child-adjacent-child.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@csstools/postcss-is-pseudo-class/dist/split-selectors/complex/child-adjacent-child.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+export declare function childAdjacentChild(selector: any): boolean;
Index: frontend/node_modules/@csstools/postcss-is-pseudo-class/dist/split-selectors/complex/is-in-compound.d.ts
===================================================================
--- frontend/node_modules/@csstools/postcss-is-pseudo-class/dist/split-selectors/complex/is-in-compound.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@csstools/postcss-is-pseudo-class/dist/split-selectors/complex/is-in-compound.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+export declare function isInCompoundWithOneOtherElement(selector: any): boolean;
Index: frontend/node_modules/@csstools/postcss-is-pseudo-class/dist/split-selectors/compound-selector-order.d.ts
===================================================================
--- frontend/node_modules/@csstools/postcss-is-pseudo-class/dist/split-selectors/compound-selector-order.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@csstools/postcss-is-pseudo-class/dist/split-selectors/compound-selector-order.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+export declare function sortCompoundSelectorsInsideComplexSelector(node: any): void;
Index: frontend/node_modules/@csstools/postcss-is-pseudo-class/dist/split-selectors/split-selectors.d.ts
===================================================================
--- frontend/node_modules/@csstools/postcss-is-pseudo-class/dist/split-selectors/split-selectors.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@csstools/postcss-is-pseudo-class/dist/split-selectors/split-selectors.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,3 @@
+export default function splitSelectors(selectors: string[], pluginOptions: {
+    specificityMatchingName: string;
+}, recursionDepth?: number): any[];
Index: frontend/node_modules/@csstools/postcss-is-pseudo-class/package.json
===================================================================
--- frontend/node_modules/@csstools/postcss-is-pseudo-class/package.json	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@csstools/postcss-is-pseudo-class/package.json	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,78 @@
+{
+	"name": "@csstools/postcss-is-pseudo-class",
+	"description": "A pseudo-class for matching elements in a selector list",
+	"version": "2.0.7",
+	"author": "Jonathan Neal <jonathantneal@hotmail.com>",
+	"license": "CC0-1.0",
+	"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": {
+		"@csstools/selector-specificity": "^2.0.0",
+		"postcss-selector-parser": "^6.0.10"
+	},
+	"peerDependencies": {
+		"postcss": "^8.2"
+	},
+	"devDependencies": {
+		"puppeteer": "^15.1.1"
+	},
+	"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",
+		"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",
+		"stryker": "stryker run --logLevel error",
+		"test": "node .tape.mjs && npm run test:exports",
+		"test:browser": "node ./test/_browser.mjs",
+		"test:exports": "node ./test/_import.mjs && node ./test/_require.cjs",
+		"test:rewrite-expects": "REWRITE_EXPECTS=true node .tape.mjs"
+	},
+	"homepage": "https://github.com/csstools/postcss-plugins/tree/main/plugins/postcss-is-pseudo-class#readme",
+	"repository": {
+		"type": "git",
+		"url": "https://github.com/csstools/postcss-plugins.git",
+		"directory": "plugins/postcss-is-pseudo-class"
+	},
+	"bugs": "https://github.com/csstools/postcss-plugins/issues",
+	"keywords": [
+		"css",
+		"is",
+		"matches",
+		"polyfill",
+		"postcss",
+		"postcss-plugin",
+		"pseudo",
+		"selector"
+	],
+	"csstools": {
+		"exportName": "postcssIsPseudoClass",
+		"humanReadableName": "PostCSS Is Pseudo"
+	},
+	"volta": {
+		"extends": "../../package.json"
+	}
+}
