Started to do animations | DO NOT USE IN PROD
diff --git a/.vscode/settings.json b/.vscode/settings.json
index 49da415..1a80597 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -22,6 +22,7 @@
         "noreferrer",
         "parpart",
         "pypi",
+        "rolemenu",
         "setlanguage",
         "slowmode",
         "softban",
diff --git a/Components/Card.js b/Components/Card.js
index bab6153..4043894 100644
--- a/Components/Card.js
+++ b/Components/Card.js
@@ -2,15 +2,25 @@
 import Styles from '../styles/Components/card.module.css';
 import react from 'react'
 import { withRouter } from "next/router";
+import handleViewport from 'react-in-viewport';
 
 class Card extends Component {
     constructor(props) {
         super(props);
+        this.state = {
+            shown: false
+        }
+    }
+
+    animateIn() {
+        setTimeout(() => {
+            this.setState({shown: true});
+        }, this.props.delay * 200);
     }
 
     render() {
         return (
-            <div className={Styles.card} style={{
+            <div className={Styles.card + " " + (this.state.shown ? Styles.shown : null)} style={{
                 margin: "0"
             }} onClick={this.props.url ? () => { this.props.router.push(this.props.url)} : null}>
                 <div className={Styles.backgroundGradient} style={{
@@ -43,16 +53,46 @@
     }
 }
 
-class CardRow extends Component {
+class CardRowClass extends Component {
     constructor(props) {
         super(props);
+        this.state = {
+            shown: false
+        }
+    }
+
+    animate() {
+        const { inViewport } = this.props;
+        console.log(inViewport)
+        if (inViewport) {
+            this.setState({shown: true});
+            react.Children.toArray(
+                react.Children.toArray(this.props.children)[0]
+                .props.children).forEach((item) => {
+                    item.ref.current.animateIn();
+                }
+            );
+        }
     }
 
     render() {
+        if (!this.state.shown) this.animate()
+        else console.log("not animating")
         return (
             <div className={Styles.container}>
                 {
                     react.Children.toArray(this.props.children).map((item, index) => {
+                        item = <Card
+                            delay={index}
+                            title={item.props.title}
+                            subtext={item.props.subtext}
+                            wave={item.props.wave}
+                            gradient={item.props.gradient}
+                            icon={item.props.icon}
+                            buttons={item.props.buttons}
+                            buttonText={item.props.buttonText}
+                            url={item.props.url}
+                        />
                         return <div className={Styles.item} key={index}>{item}</div>
                     })
                 }
@@ -62,5 +102,6 @@
 }
 
 Card = withRouter(Card);
+const CardRow = handleViewport(CardRowClass, { rootMargin: '-1.0px' });
 
 export { Card, CardRow };
diff --git a/Components/ClicksForms/Question.js b/Components/ClicksForms/Question.js
index 25deeab..929622d 100644
--- a/Components/ClicksForms/Question.js
+++ b/Components/ClicksForms/Question.js
@@ -6,7 +6,7 @@
         super(props)
         this.state = {
             status: null,
-            answer: this.props.type == "multichoice" ? [] : null,
+            answer: this.props.type === "multichoice" ? [] : null,
             errorString: null,
         }
     }
@@ -71,7 +71,7 @@
                 }
                 break
             case 'multichoice':
-                if ( typeof answer != 'object' ) {
+                if ( typeof answer !== 'object' ) {
                     valid = null
                 } else if ( !answer.length ) {
                     valid = null
@@ -87,7 +87,7 @@
                 }
                 break
             case 'fileupload', 'date', 'time':
-                valid = answer != null ? true : null
+                valid = answer !== null ? true : null
                 break
         }
         this.setState({
@@ -98,7 +98,7 @@
     }
 
     render() {
-        let borderColor = this.state.status == false ? this.getCol("red") : this.getCol("default");
+        let borderColor = this.state.status === false ? this.getCol("red") : this.getCol("default");
         return (
             <div className={Styles.questionContainer} style={{
                 boxShadow: `0px 0px 10px ${borderColor}`,
diff --git a/Components/Header.js b/Components/Header.js
index 7e96ba6..ff46351 100644
--- a/Components/Header.js
+++ b/Components/Header.js
@@ -32,7 +32,7 @@
     function confetti() {
         if (!isAnimating && !isDisappointmentAnimating && props.index) {
             setClickTotal(clickTotal + 1);
-            if (clickTotal > 0 && Math.floor(Math.random() * 3) == 0) {
+            if (clickTotal > 0 && Math.floor(Math.random() * 3) === 0) {
                 disappointment();
             } else {
                 reward();
diff --git a/Components/Panels.js b/Components/Panels.js
index c6ae2f6..7aaa658 100644
--- a/Components/Panels.js
+++ b/Components/Panels.js
@@ -37,17 +37,17 @@
 
     calculateValidity() {
         this.children.map((item, index) => {
-            if ( index > 0 && item.props.halfSize && this.validity[index - 1] == 'half1' ) {
+            if ( index > 0 && item.props.halfSize && this.validity[index - 1] === 'half1' ) {
                 this.validity[index] = 'half2';
-            } else if ( index > 0 && !item.props.halfSize && this.validity[index - 1] == 'half1' ) {
+            } else if ( index > 0 && !item.props.halfSize && this.validity[index - 1] === 'half1' ) {
                 this.validity[index] = 'full';
                 this.validity[index - 1] = 'full';
-            } else if ( item.props.halfSize && !(index == this.props.children.length - 1) ) {
+            } else if ( item.props.halfSize && !(index === this.props.children.length - 1) ) {
                 this.validity[index] = 'half1';
-            } else if ( index == this.props.children.length - 1 && this.validity[index - 1] == 'half1' ) {
+            } else if ( index === this.props.children.length - 1 && this.validity[index - 1] === 'half1' ) {
                 this.validity[index] = 'full';
                 this.validity[index - 1] = 'full';
-            } else if ( index == this.props.children.length - 1 && this.validity[index - 1] == 'half2' ) {
+            } else if ( index === this.props.children.length - 1 && this.validity[index - 1] === 'half2' ) {
                 this.validity[index] = 'full';
             } else {
                 this.validity[index] = 'full';
@@ -60,9 +60,9 @@
             <div className={Styles.container}>
                 {
                     this.children.map((item, index) => {
-                        if ( this.validity[index] == 'full' ) {
+                        if ( this.validity[index] === 'full' ) {
                             return this.children[index]
-                        } else if ( this.validity[index] == 'half1' ) {
+                        } else if ( this.validity[index] === 'half1' ) {
                             return <div key={index} className={Styles.doublePanel}>
                                 {this.children[index]}
                                 {this.children[index + 1]}
diff --git a/Components/ThemeChangeButton.js b/Components/ThemeChangeButton.js
index 616c14a..8001481 100644
--- a/Components/ThemeChangeButton.js
+++ b/Components/ThemeChangeButton.js
@@ -19,7 +19,7 @@
                 setColorMode(colorMode === 'light' ? 'dark' : 'light');
             }} href="#">
                 <img className={Styles.icon} alt="Theme" src={"https://assets.clicks.codes/web/icons/" + (
-                    colorMode == 'light' ? "light-white" : "dark"
+                    colorMode === 'light' ? "light-white" : "dark"
                 ) + ".svg"} />
             </a>
         </>
diff --git a/package.json b/package.json
index 5dd33ce..fa49b24 100644
--- a/package.json
+++ b/package.json
@@ -3,8 +3,8 @@
   "version": "0.1.0",
   "private": true,
   "scripts": {
-    "dev": "NODE_OPTIONS=--openssl-legacy-provider next dev",
-    "build": "ANALYZE=true NODE_OPTIONS=--openssl-legacy-provider NODE_ENV=production next build",
+    "dev": "next dev",
+    "build": "ANALYZE=true NODE_ENV=production next build",
     "start": "next start",
     "lint": "next lint",
     "windev": "next dev",
@@ -18,7 +18,7 @@
     "js-cookie": "^3.0.1",
     "js-cookies": "^1.0.4",
     "mongodb": "^4.1.1",
-    "next": "^12.1.6",
+    "next": "^12.2.2",
     "next-redux-wrapper": "^7.0.4",
     "react": "^18.1.0",
     "react-dom": "^18.1.0",
diff --git a/pages/api/rsmv/complete.js b/pages/api/rsmv/complete.js
index 002caee..6cdd97a 100644
--- a/pages/api/rsmv/complete.js
+++ b/pages/api/rsmv/complete.js
@@ -2,12 +2,12 @@
 
 const Complete = async (req, res) => {
     let code = await Axios.post('http://127.0.0.1:3000/api/rsmv/validate', {code:req.body.code});
-    if (code.status != 200) {
+    if (code.status !== 200) {
         return res.send(404);
     }
-    if (code.data.user  != req.body.uid) return res.send(401)
-    if (code.data.guild != req.body.gid) return res.send(401)
-    if (code.data.role  != req.body.rid) return res.send(401)
+    if (code.data.user  !== req.body.uid) return res.send(401)
+    if (code.data.guild !== req.body.gid) return res.send(401)
+    if (code.data.role  !== req.body.rid) return res.send(401)
 
     let secret = "slwu0rZV5W6WdmGtgI16du8Ar2tQGMr3Q9dE6u3poKiVODNV9SweaA3buawgkTmTuITXDWOUpBcTFA0qWrUvoshi1JB180WOFwA7"
     let resp = await Axios.get(
diff --git a/pages/clicksforms.js b/pages/clicksforms.js
index 8da3441..155d605 100644
--- a/pages/clicksforms.js
+++ b/pages/clicksforms.js
@@ -49,7 +49,7 @@
               <ListItem><Code colour="6576CC">/manage</Code> Lets you manage your servers forms.</ListItem>
             </List>
           </Panel>
-          <Panel halfSize={true} id="services" style={this.state.toHighlight == "services" ? {border: "solid 10px red"} : {}}>
+          <Panel halfSize={true} id="services" style={this.state.toHighlight === "services" ? {border: "solid 10px red"} : {}}>
             <Title>Services</Title>
             <Divider toHighlight={this.state.toHighlight} highlightColour="6576CC" name="services"/>
             <Text>ClicksForms supports services such as <a href="https://docs.google.com/forms">Google Forms</a> through our Add-on.</Text>
diff --git a/pages/clicksforms/form.js b/pages/clicksforms/form.js
index df5aeec..aa1b032 100644
--- a/pages/clicksforms/form.js
+++ b/pages/clicksforms/form.js
@@ -61,14 +61,14 @@
         method: "GET",
         mode: "cors"
     })
-    if ( (await code).status == 404 ) {
+    if ( (await code).status ===  404 ) {
         return {
             redirect: {
                 destination: '/clicksforms/error/deleted',
                 permanent: true
             }
         }
-    } else if ( code.status != 200 ) {
+    } else if ( code.status !== 200 ) {
         return {
             redirect: {
                 destination: '/clicksforms/error/unknown',
diff --git a/pages/nucleus/embed/index.js b/pages/nucleus/embed/index.js
deleted file mode 100644
index 7ef2ced..0000000
--- a/pages/nucleus/embed/index.js
+++ /dev/null
@@ -1,106 +0,0 @@
-import HCaptcha from 'react-hcaptcha';
-import Axios from 'axios';
-import Router from 'next/router';
-import React from 'react';
-import Header from '../../../Components/Header'
-import { useReward } from 'react-rewards';
-import { Card, CardRow } from '../../../Components/Card';
-
-import { AutoLayout, Panel, Title, Text, Divider } from '../../../Components/Panels';
-import { List, ListItem } from '../../../Components/Texttools';
-import { useColorMode } from 'theme-ui';
-import Styles from '../../../styles/nucleus/embed.module.css';
-
-
-function Embed(props) {
-    const [clicked, setClicked] = React.useState(false);
-    const [theme, setTheme] = useColorMode()
-
-    const { reward: reward, isAnimating: isAnimating } = useReward('confetti', 'confetti', {
-        elementSize: 10,
-        elementCount: 150,
-        startVelocity: 35,
-        lifetime: 300,
-        decay: 0.94,
-        spread: 170,
-        position: "absolute",
-        colors: ["#68D49E"]
-    });
-
-    async function submitForm(tkn) {
-        if ( clicked ) {
-            Router.push('/nucleus/verify/alreadyVerified', '/nucleus/verify/success');
-        }
-        setClicked(true);
-        reward();
-        let code = await Axios.post('/api/nucleus/verify/complete', {
-            code: props.code,
-            tkn: tkn
-        });
-        setTimeout(() => {
-            if (code.data.success === true ) return Router.push('/nucleus/verify/success','/nucleus/verify')
-            else return Router.push('/nucleus/verify/failure','/nucleus/verify')
-        }, 2500);
-    }
-
-    return <>
-        <Header
-            name="Embed Editor"
-            subtext={`Editing embed in ${props.gName}`}
-            gradient={["F27878", "D96B6B"]}
-            wave="web/waves/header/nucleus"
-            buttons={[]}
-        />
-        <AutoLayout>
-            <Panel>
-                <Title>Preview</Title>
-                <Divider name="preview"/>
-                <div className={Styles.previewEmbed}>
-                    <div className={Styles.left}></div>
-                        <div className={Styles.title}><input ></input></div>
-                        <div className={Styles.description}><input ></input></div>
-                    </div>
-                    <div className={Styles.right}>
-                        <div className={Styles.uploadImage} />
-                    </div>
-                    <>
-
-                    </>
-                <div className={Styles.footer}>
-                    <ImageUpload size={64} />
-                </div>
-            </Panel>
-            <Panel halfSize={false} id="invite">
-            <Title>Invite</Title>
-            <Divider />
-            <CardRow>
-                <Card
-                    wave="nucleus"
-                    icon="bots/nucleus/circle"
-                    buttonText={"FFFFFF"} gradient={["F27878", "D96B6B"]}
-                    title="Nucleus"
-                    subtext="Invite Nucleus to your server"
-                    buttons={[
-                        {color: "424242", link: "https://discord.com/api/oauth2/authorize?client_id=715989276382462053&permissions=121295465718&scope=bot%20applications.commands", text: "Invite"}
-                    ]}
-                    url="https://discord.com/api/oauth2/authorize?client_id=715989276382462053&permissions=121295465718&scope=bot%20applications.commands"
-                />
-            </CardRow>
-        </Panel>
-        </AutoLayout>
-    </>
-}
-
-export default Embed;
-export async function getServerSideProps(ctx) {
-    return {
-        props: {
-            gID: code.data.gID,
-            gName: code.data.gName,
-            mID: code.data.mID,
-            cID: code.data.cID,
-            headers: headers,
-            code: ctx.query.code
-        }
-    }
-}
\ No newline at end of file
diff --git a/pages/nucleus/verify/index.js b/pages/nucleus/verify/index.js
index 5057b2a..38a3aea 100644
--- a/pages/nucleus/verify/index.js
+++ b/pages/nucleus/verify/index.js
@@ -12,7 +12,6 @@
 
 function Verify(props) {
     const [clicked, setClicked] = React.useState(false);
-    const [theme, setTheme] = useColorMode()
 
     const { reward: reward, isAnimating: isAnimating } = useReward('confetti', 'confetti', {
         elementSize: 10,
@@ -46,7 +45,7 @@
             name={props.guild_name}
             customImage={props.guild_icon_url}
             roundImage={true}
-            subtext={`${props.memberCount} members`}
+            subtext={`Welcome, ${props.username}`}
             gradient={["F27878", "D96B6B"]}
             wave="web/waves/header/nucleus"
             buttons={[]}
@@ -87,8 +86,7 @@
     }
     let code;
     try {
-        await Axios.patch(`http://localhost:10000/verify/${ctx.query.code}`);
-        code = await Axios.get(`http://localhost:10000/verify/${ctx.query.code}`, {code: ctx.query.code});
+        code = await Axios.get(`http://localhost:10000/verify/${ctx.query.code}`);
     } catch (e) {
         return {
             redirect: {
@@ -105,7 +103,7 @@
             gID: code.data.gID,
             guild_name: code.data.gName,
             guild_icon_url: code.data.gIcon,
-            memberCount: code.data.mCount,
+            username: code.data.uName,
             headers: headers,
             code: ctx.query.code
         }
diff --git a/pages/rsmv/index.js b/pages/rsmv/index.js
index f46c46e..231bcc5 100644
--- a/pages/rsmv/index.js
+++ b/pages/rsmv/index.js
@@ -21,7 +21,7 @@
 
     async handleVerificationSuccess(cls, token) {
         const chk = await Axios.put('/api/rsmv/verifyTkn', { tkn: token.toString() })
-        if(chk.data.success == true) {
+        if(chk.data.success === true) {
             this.setState({
                 captchaComplete: true
             })
@@ -107,7 +107,7 @@
     }
     let code = await Axios.post('http://localhost:3000/api/rsmv/validate', {code:ctx.query.code});
     let headers = ctx.req.headers;
-    if (code.status != 200 ) {
+    if (code.status !== 200 ) {
         return {
             redirect: {
                 destination: '/rsmv/failure',
diff --git a/pages/rsmv/rsmvtesting.js b/pages/rsmv/rsmvtesting.js
index 8587221..e37f1f0 100644
--- a/pages/rsmv/rsmvtesting.js
+++ b/pages/rsmv/rsmvtesting.js
@@ -21,7 +21,7 @@
 
     async handleVerificationSuccess(cls, token) {
         const chk = await Axios.put('/api/rsmv/verifyTkn', { tkn: token.toString() })
-        if(chk.data.success == true) {
+        if(chk.data.success === true) {
             this.setState({
                 captchaComplete: true
             })
diff --git a/styles/Components/card.module.css b/styles/Components/card.module.css
index b085718..9997098 100644
--- a/styles/Components/card.module.css
+++ b/styles/Components/card.module.css
@@ -32,12 +32,19 @@
     overflow: hidden;
     margin: 100px;
     transition: filter 0.3s ease-in-out;
-    transition: transform 0.15s ease-in-out;
+    opacity: 0;
+    transform: translateY(10px);
+    transition: 0.3s ease-in-out;
 }
 .card:hover {
-    transform: translateY(-5px);
+    transform: translateY(-5px) !important;
     cursor: pointer;
 }
+.card.shown {
+    opacity: 1 !important;
+    transform: translateY(0px);
+}
+
 
 
 .panel {
diff --git a/todo/roles/index.js b/todo/roles/index.js
index 8ddc9b8..e9e8902 100644
--- a/todo/roles/index.js
+++ b/todo/roles/index.js
@@ -21,7 +21,7 @@
 
     async handleVerificationSuccess(cls, token) {
         const chk = await Axios.put('/api/nucleus/verifyTkn', { tkn: token.toString() })
-        if(chk.data.success == true) {
+        if(chk.data.success === true) {
             this.setState({
                 captchaComplete: true
             })
diff --git a/yarn.lock b/yarn.lock
index 21359c0..45cbfd5 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1156,10 +1156,10 @@
   dependencies:
     webpack-bundle-analyzer "4.3.0"
 
-"@next/env@12.1.6":
-  version "12.1.6"
-  resolved "https://registry.yarnpkg.com/@next/env/-/env-12.1.6.tgz#5f44823a78335355f00f1687cfc4f1dafa3eca08"
-  integrity sha512-Te/OBDXFSodPU6jlXYPAXpmZr/AkG6DCATAxttQxqOWaq6eDFX25Db3dK0120GZrSZmv4QCe9KsZmJKDbWs4OA==
+"@next/env@12.2.2":
+  version "12.2.2"
+  resolved "https://registry.yarnpkg.com/@next/env/-/env-12.2.2.tgz#cc1a0a445bd254499e30f632968c03192455f4cc"
+  integrity sha512-BqDwE4gDl1F608TpnNxZqrCn6g48MBjvmWFEmeX5wEXDXh3IkAOw6ASKUgjT8H4OUePYFqghDFUss5ZhnbOUjw==
 
 "@next/eslint-plugin-next@11.1.2":
   version "11.1.2"
@@ -1168,65 +1168,70 @@
   dependencies:
     glob "7.1.7"
 
-"@next/swc-android-arm-eabi@12.1.6":
-  version "12.1.6"
-  resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.1.6.tgz#79a35349b98f2f8c038ab6261aa9cd0d121c03f9"
-  integrity sha512-BxBr3QAAAXWgk/K7EedvzxJr2dE014mghBSA9iOEAv0bMgF+MRq4PoASjuHi15M2zfowpcRG8XQhMFtxftCleQ==
+"@next/swc-android-arm-eabi@12.2.2":
+  version "12.2.2"
+  resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.2.2.tgz#f6c4111e6371f73af6bf80c9accb3d96850a92cd"
+  integrity sha512-VHjuCHeq9qCprUZbsRxxM/VqSW8MmsUtqB5nEpGEgUNnQi/BTm/2aK8tl7R4D0twGKRh6g1AAeFuWtXzk9Z/vQ==
 
-"@next/swc-android-arm64@12.1.6":
-  version "12.1.6"
-  resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-12.1.6.tgz#ec08ea61794f8752c8ebcacbed0aafc5b9407456"
-  integrity sha512-EboEk3ROYY7U6WA2RrMt/cXXMokUTXXfnxe2+CU+DOahvbrO8QSWhlBl9I9ZbFzJx28AGB9Yo3oQHCvph/4Lew==
+"@next/swc-android-arm64@12.2.2":
+  version "12.2.2"
+  resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-12.2.2.tgz#b69de59c51e631a7600439e7a8993d6e82f3369e"
+  integrity sha512-v5EYzXUOSv0r9mO/2PX6mOcF53k8ndlu9yeFHVAWW1Dhw2jaJcvTRcCAwYYN8Q3tDg0nH3NbEltJDLKmcJOuVA==
 
-"@next/swc-darwin-arm64@12.1.6":
-  version "12.1.6"
-  resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.1.6.tgz#d1053805615fd0706e9b1667893a72271cd87119"
-  integrity sha512-P0EXU12BMSdNj1F7vdkP/VrYDuCNwBExtRPDYawgSUakzi6qP0iKJpya2BuLvNzXx+XPU49GFuDC5X+SvY0mOw==
+"@next/swc-darwin-arm64@12.2.2":
+  version "12.2.2"
+  resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.2.2.tgz#80157c91668eff95b72d052428c353eab0fc4c50"
+  integrity sha512-JCoGySHKGt+YBk7xRTFGx1QjrnCcwYxIo3yGepcOq64MoiocTM3yllQWeOAJU2/k9MH0+B5E9WUSme4rOCBbpA==
 
-"@next/swc-darwin-x64@12.1.6":
-  version "12.1.6"
-  resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-12.1.6.tgz#2d1b926a22f4c5230d5b311f9c56cfdcc406afec"
-  integrity sha512-9FptMnbgHJK3dRDzfTpexs9S2hGpzOQxSQbe8omz6Pcl7rnEp9x4uSEKY51ho85JCjL4d0tDLBcXEJZKKLzxNg==
+"@next/swc-darwin-x64@12.2.2":
+  version "12.2.2"
+  resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-12.2.2.tgz#12be2f58e676fccff3d48a62921b9927ed295133"
+  integrity sha512-dztDtvfkhUqiqpXvrWVccfGhLe44yQ5tQ7B4tBfnsOR6vxzI9DNPHTlEOgRN9qDqTAcFyPxvg86mn4l8bB9Jcw==
 
-"@next/swc-linux-arm-gnueabihf@12.1.6":
-  version "12.1.6"
-  resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.1.6.tgz#c021918d2a94a17f823106a5e069335b8a19724f"
-  integrity sha512-PvfEa1RR55dsik/IDkCKSFkk6ODNGJqPY3ysVUZqmnWMDSuqFtf7BPWHFa/53znpvVB5XaJ5Z1/6aR5CTIqxPw==
+"@next/swc-freebsd-x64@12.2.2":
+  version "12.2.2"
+  resolved "https://registry.yarnpkg.com/@next/swc-freebsd-x64/-/swc-freebsd-x64-12.2.2.tgz#de1363431a49059f1efb8c0f86ce6a79c53b3a95"
+  integrity sha512-JUnXB+2xfxqsAvhFLPJpU1NeyDsvJrKoOjpV7g3Dxbno2Riu4tDKn3kKF886yleAuD/1qNTUCpqubTvbbT2VoA==
 
-"@next/swc-linux-arm64-gnu@12.1.6":
-  version "12.1.6"
-  resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.1.6.tgz#ac55c07bfabde378dfa0ce2b8fc1c3b2897e81ae"
-  integrity sha512-53QOvX1jBbC2ctnmWHyRhMajGq7QZfl974WYlwclXarVV418X7ed7o/EzGY+YVAEKzIVaAB9JFFWGXn8WWo0gQ==
+"@next/swc-linux-arm-gnueabihf@12.2.2":
+  version "12.2.2"
+  resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.2.2.tgz#d5b8e0d1bb55bbd9db4d2fec018217471dc8b9e6"
+  integrity sha512-XeYC/qqPLz58R4pjkb+x8sUUxuGLnx9QruC7/IGkK68yW4G17PHwKI/1njFYVfXTXUukpWjcfBuauWwxp9ke7Q==
 
-"@next/swc-linux-arm64-musl@12.1.6":
-  version "12.1.6"
-  resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.1.6.tgz#e429f826279894be9096be6bec13e75e3d6bd671"
-  integrity sha512-CMWAkYqfGdQCS+uuMA1A2UhOfcUYeoqnTW7msLr2RyYAys15pD960hlDfq7QAi8BCAKk0sQ2rjsl0iqMyziohQ==
+"@next/swc-linux-arm64-gnu@12.2.2":
+  version "12.2.2"
+  resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.2.2.tgz#3bc75984e1d5ec8f59eb53702cc382d8e1be2061"
+  integrity sha512-d6jT8xgfKYFkzR7J0OHo2D+kFvY/6W8qEo6/hmdrTt6AKAqxs//rbbcdoyn3YQq1x6FVUUd39zzpezZntg9Naw==
 
-"@next/swc-linux-x64-gnu@12.1.6":
-  version "12.1.6"
-  resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.1.6.tgz#1f276c0784a5ca599bfa34b2fcc0b38f3a738e08"
-  integrity sha512-AC7jE4Fxpn0s3ujngClIDTiEM/CQiB2N2vkcyWWn6734AmGT03Duq6RYtPMymFobDdAtZGFZd5nR95WjPzbZAQ==
+"@next/swc-linux-arm64-musl@12.2.2":
+  version "12.2.2"
+  resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.2.2.tgz#270db73e07a18d999f61e79a917943fa5bc1ef56"
+  integrity sha512-rIZRFxI9N/502auJT1i7coas0HTHUM+HaXMyJiCpnY8Rimbo0495ir24tzzHo3nQqJwcflcPTwEh/DV17sdv9A==
 
-"@next/swc-linux-x64-musl@12.1.6":
-  version "12.1.6"
-  resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.1.6.tgz#1d9933dd6ba303dcfd8a2acd6ac7c27ed41e2eea"
-  integrity sha512-c9Vjmi0EVk0Kou2qbrynskVarnFwfYIi+wKufR9Ad7/IKKuP6aEhOdZiIIdKsYWRtK2IWRF3h3YmdnEa2WLUag==
+"@next/swc-linux-x64-gnu@12.2.2":
+  version "12.2.2"
+  resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.2.2.tgz#e6c72fa20478552e898c434f4d4c0c5e89d2ea78"
+  integrity sha512-ir1vNadlUDj7eQk15AvfhG5BjVizuCHks9uZwBfUgT5jyeDCeRvaDCo1+Q6+0CLOAnYDR/nqSCvBgzG2UdFh9A==
 
-"@next/swc-win32-arm64-msvc@12.1.6":
-  version "12.1.6"
-  resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.1.6.tgz#2ef9837f12ca652b1783d72ecb86208906042f02"
-  integrity sha512-3UTOL/5XZSKFelM7qN0it35o3Cegm6LsyuERR3/OoqEExyj3aCk7F025b54/707HTMAnjlvQK3DzLhPu/xxO4g==
+"@next/swc-linux-x64-musl@12.2.2":
+  version "12.2.2"
+  resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.2.2.tgz#b9ef9efe2c401839cdefa5e70402386aafdce15a"
+  integrity sha512-bte5n2GzLN3O8JdSFYWZzMgEgDHZmRz5wiispiiDssj4ik3l8E7wq/czNi8RmIF+ioj2sYVokUNa/ekLzrESWw==
 
-"@next/swc-win32-ia32-msvc@12.1.6":
-  version "12.1.6"
-  resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.1.6.tgz#74003d0aa1c59dfa56cb15481a5c607cbc0027b9"
-  integrity sha512-8ZWoj6nCq6fI1yCzKq6oK0jE6Mxlz4MrEsRyu0TwDztWQWe7rh4XXGLAa2YVPatYcHhMcUL+fQQbqd1MsgaSDA==
+"@next/swc-win32-arm64-msvc@12.2.2":
+  version "12.2.2"
+  resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.2.2.tgz#18fa7ec7248da3a7926a0601d9ececc53ac83157"
+  integrity sha512-ZUGCmcDmdPVSAlwJ/aD+1F9lYW8vttseiv4n2+VCDv5JloxiX9aY32kYZaJJO7hmTLNrprvXkb4OvNuHdN22Jg==
 
-"@next/swc-win32-x64-msvc@12.1.6":
-  version "12.1.6"
-  resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.1.6.tgz#a350caf42975e7197b24b495b8d764eec7e6a36e"
-  integrity sha512-4ZEwiRuZEicXhXqmhw3+de8Z4EpOLQj/gp+D9fFWo6ii6W1kBkNNvvEx4A90ugppu+74pT1lIJnOuz3A9oQeJA==
+"@next/swc-win32-ia32-msvc@12.2.2":
+  version "12.2.2"
+  resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.2.2.tgz#54936e84f4a219441d051940354da7cd3eafbb4f"
+  integrity sha512-v7ykeEDbr9eXiblGSZiEYYkWoig6sRhAbLKHUHQtk8vEWWVEqeXFcxmw6LRrKu5rCN1DY357UlYWToCGPQPCRA==
+
+"@next/swc-win32-x64-msvc@12.2.2":
+  version "12.2.2"
+  resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.2.2.tgz#7460be700a60d75816f01109400b51fe929d7e89"
+  integrity sha512-2D2iinWUL6xx8D9LYVZ5qi7FP6uLAoWymt8m8aaG2Ld/Ka8/k723fJfiklfuAcwOxfufPJI+nRbT5VcgHGzHAQ==
 
 "@nodelib/fs.scandir@2.1.5":
   version "2.1.5"
@@ -1461,6 +1466,13 @@
     "@svgr/plugin-svgo" "^5.5.0"
     loader-utils "^2.0.0"
 
+"@swc/helpers@0.4.2":
+  version "0.4.2"
+  resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.4.2.tgz#ed1f6997ffbc22396665d9ba74e2a5c0a2d782f8"
+  integrity sha512-556Az0VX7WR6UdoTn4htt/l3zPQ7bsQWK+HqdG4swV7beUCxo/BqmvbOpUkTIm/9ih86LIf1qsUnywNL3obGHw==
+  dependencies:
+    tslib "^2.4.0"
+
 "@theme-ui/color-modes@0.12.0":
   version "0.12.0"
   resolved "https://registry.npmjs.org/@theme-ui/color-modes/-/color-modes-0.12.0.tgz"
@@ -3160,28 +3172,31 @@
   resolved "https://registry.npmjs.org/next-redux-wrapper/-/next-redux-wrapper-7.0.5.tgz"
   integrity sha512-UFXdAWG5i+GFT8+Hoqpx3GArkPh34fVWF9YoA2VSHlBzsrPtnRd7NWM6FNSYUennpommTpWJ09mu+r/1UxyIkg==
 
-next@^12.1.6:
-  version "12.1.6"
-  resolved "https://registry.yarnpkg.com/next/-/next-12.1.6.tgz#eb205e64af1998651f96f9df44556d47d8bbc533"
-  integrity sha512-cebwKxL3/DhNKfg9tPZDQmbRKjueqykHHbgaoG4VBRH3AHQJ2HO0dbKFiS1hPhe1/qgc2d/hFeadsbPicmLD+A==
+next@^12.2.2:
+  version "12.2.2"
+  resolved "https://registry.yarnpkg.com/next/-/next-12.2.2.tgz#029bf5e4a18a891ca5d05b189b7cd983fd22c072"
+  integrity sha512-zAYFY45aBry/PlKONqtlloRFqU/We3zWYdn2NoGvDZkoYUYQSJC8WMcalS5C19MxbCZLUVCX7D7a6gTGgl2yLg==
   dependencies:
-    "@next/env" "12.1.6"
+    "@next/env" "12.2.2"
+    "@swc/helpers" "0.4.2"
     caniuse-lite "^1.0.30001332"
     postcss "8.4.5"
     styled-jsx "5.0.2"
+    use-sync-external-store "1.1.0"
   optionalDependencies:
-    "@next/swc-android-arm-eabi" "12.1.6"
-    "@next/swc-android-arm64" "12.1.6"
-    "@next/swc-darwin-arm64" "12.1.6"
-    "@next/swc-darwin-x64" "12.1.6"
-    "@next/swc-linux-arm-gnueabihf" "12.1.6"
-    "@next/swc-linux-arm64-gnu" "12.1.6"
-    "@next/swc-linux-arm64-musl" "12.1.6"
-    "@next/swc-linux-x64-gnu" "12.1.6"
-    "@next/swc-linux-x64-musl" "12.1.6"
-    "@next/swc-win32-arm64-msvc" "12.1.6"
-    "@next/swc-win32-ia32-msvc" "12.1.6"
-    "@next/swc-win32-x64-msvc" "12.1.6"
+    "@next/swc-android-arm-eabi" "12.2.2"
+    "@next/swc-android-arm64" "12.2.2"
+    "@next/swc-darwin-arm64" "12.2.2"
+    "@next/swc-darwin-x64" "12.2.2"
+    "@next/swc-freebsd-x64" "12.2.2"
+    "@next/swc-linux-arm-gnueabihf" "12.2.2"
+    "@next/swc-linux-arm64-gnu" "12.2.2"
+    "@next/swc-linux-arm64-musl" "12.2.2"
+    "@next/swc-linux-x64-gnu" "12.2.2"
+    "@next/swc-linux-x64-musl" "12.2.2"
+    "@next/swc-win32-arm64-msvc" "12.2.2"
+    "@next/swc-win32-ia32-msvc" "12.2.2"
+    "@next/swc-win32-x64-msvc" "12.2.2"
 
 node-releases@^2.0.1:
   version "2.0.2"
@@ -3986,6 +4001,11 @@
   resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz"
   integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
 
+tslib@^2.4.0:
+  version "2.4.0"
+  resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3"
+  integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==
+
 tsutils@^3.21.0:
   version "3.21.0"
   resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz"
@@ -4050,6 +4070,11 @@
   dependencies:
     punycode "^2.1.0"
 
+use-sync-external-store@1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.1.0.tgz#3343c3fe7f7e404db70f8c687adf5c1652d34e82"
+  integrity sha512-SEnieB2FPKEVne66NpXPd1Np4R1lTNKfjuy3XdIoPQKYBAFdzbzSZlSn1KJZUiihQLQC5Znot4SBz1EOTBwQAQ==
+
 util.promisify@~1.0.0:
   version "1.0.1"
   resolved "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz"