huge changes
diff --git a/.vscode/settings.json b/.vscode/settings.json
index 32fbb9a..ef74742 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -1,3 +1,31 @@
 {
-	"git.ignoreLimitWarning": true
+	"git.ignoreLimitWarning": true,
+	"cSpell.ignoreWords": [
+		"Captchas",
+		"Carrington",
+		"Cavendon",
+		"Customise",
+		"RSMV",
+		"Statethis",
+		"Texttools",
+		"Unbans",
+		"Unmutes",
+		"apos",
+		"autolayout",
+		"clcks",
+		"clicksforms",
+		"colour",
+		"customisation",
+		"getprefix",
+		"hcaptcha",
+		"noopener",
+		"noreferrer",
+		"parpart",
+		"pypi",
+		"setlanguage",
+		"slowmode",
+		"softban",
+		"unban",
+		"viewas"
+	]
 }
\ No newline at end of file
diff --git a/Components/Card.js b/Components/Card.js
index 0673883..00a2df4 100644
--- a/Components/Card.js
+++ b/Components/Card.js
@@ -1,27 +1,25 @@
 import { Component } from "react";
 import Styles from '../styles/Components/card.module.css';
 import react from 'react'
+import { withRouter } from "next/router";
 
 class Card extends Component {
 	constructor(props) {
 		super(props);
-        this.state = {
-            clicked: false,
-        }
     }
 
 	render() {
 		return (
-            <div className={Styles.card + " " + (this.state.clicked ? Styles.clicked : "")} style={{
+            <div className={Styles.card} style={{
                 margin: "0"
-            }} onClick={() => { this.setState({clicked: !this.state.clicked}) }}>
-                <div className={Styles.backgroundGradient + " " + (this.state.clicked ? Styles.clicked : "")} style={{
+            }} onClick={this.props.url ? () => { this.props.router.push(this.props.url)} : null}>
+                <div className={Styles.backgroundGradient} style={{
                     backgroundImage: `linear-gradient(69.44deg, #${this.props.gradient[0]} 0%, #${this.props.gradient[1]} 100%)`
                 }} />
-                <img alt="" className={Styles.backgroundImage} src={`https://assets.clicksminuteper.net/web/waves/card/${this.props.wave}.svg`} draggable={false} />
-                <div className={Styles.panel}>
+                <img alt="" className={Styles.backgroundImage} src={`https://assets.clicks.codes/web/waves/card/${this.props.wave}.svg`} draggable={false} />
+                <div className={Styles.panel} onClick={() => { this.props.url ? () => { this.props.router.push(this.props.url)} : null}}>
                     <div className={Styles.titleContainer}>
-                        <img alt="Project icon" className={Styles.image + " " + (this.state.clicked ? Styles.clicked : "")} src={"https://assets.clicksminuteper.net/" + (this.props.icon ? this.props.icon : this.props.wave) + ".svg"} />
+                        <img alt="Project icon" className={Styles.image} src={"https://assets.clicks.codes/" + (this.props.icon ? this.props.icon : this.props.wave) + ".svg"} />
                         <h1 className={Styles.title}>{this.props.title}</h1>
                     </div>
                     <p className={Styles.subtext}>{this.props.subtext}</p>
@@ -41,8 +39,8 @@
                     </div>
                 </div>
             </div>
-		)
-	}
+        );
+    }
 }
 
 class CardRow extends Component {
@@ -50,7 +48,6 @@
 		super(props);
 	}
 
-
 	render() {
 		return (
             <div className={Styles.container}>
@@ -64,4 +61,6 @@
 	}
 }
 
-export { Card, CardRow };
\ No newline at end of file
+Card = withRouter(Card);
+
+export { Card, CardRow };
diff --git a/Components/Header.js b/Components/Header.js
index 1ec054b..7e96ba6 100644
--- a/Components/Header.js
+++ b/Components/Header.js
@@ -1,64 +1,123 @@
-import { Component, useRef } from "react";
+import React, { useRef } from "react";
 import Styles from '../styles/Components/header.module.css';
 import Head from 'next/head';
+import { useColorMode } from "theme-ui";
+import { useReward } from "react-rewards";
+import ScrollContainer from 'react-indiana-drag-scroll'
 
-class Header extends Component {
-    constructor(props) {
-        super(props);
-        this.keys = []
+function Header(props) {
+    const [ clickTotal, setClickTotal ] = React.useState(0);
+
+    const { reward: reward, isAnimating: isAnimating } = useReward('headerConfetti', 'confetti', {
+        elementSize: 10,
+        elementCount: 150,
+        startVelocity: 35,
+        lifetime: 300,
+        decay: 0.95,
+        spread: 170,
+        position: "absolute",
+        colors: ["#F27878", "#E5AB71", "#E5DC71", "#A1CC65", "#68D49E", "#71AFE5", "#6576CC", "#8D58B2", "#BF5E9F"]
+    });
+    const { reward: disappointment, isAnimating: isDisappointmentAnimating } = useReward('disappointmentConfetti', 'confetti', {
+        elementSize: 25,
+        elementCount: 1,
+        startVelocity: 25,
+        lifetime: 350,
+        decay: 0.95,
+        spread: 0,
+        position: "absolute",
+        colors: ["#E5AB71"]
+    });
+
+    function confetti() {
+        if (!isAnimating && !isDisappointmentAnimating && props.index) {
+            setClickTotal(clickTotal + 1);
+            if (clickTotal > 0 && Math.floor(Math.random() * 3) == 0) {
+                disappointment();
+            } else {
+                reward();
+            }
+        }
     }
 
-    render() {
-        return (
-            <div className={Styles.header} style={{
-                margin: "0",
-                minHeight: this.props.fullscreen ? "100vh" : "calc(100vh - (2 * max(2em, 4vw)) - 1em)",
-            }} id={this.props.id ? this.props.id : null}>
-                <div className={Styles.backgroundGradient} style={{
-                    backgroundImage: `linear-gradient(69.44deg, #${this.props.gradient[0]} 0%, #${this.props.gradient[1]} 100%)`,
-                }} />
-                <Head>
-                    <title>{this.props.nameOverwrite ? this.props.nameOverwrite : this.props.name} - Clicks Minute Per</title>
-                    <meta name="title" content={this.props.name} />
-                    <meta name="og:title" content={this.props.name} />
-                    <meta name="description" content={this.props.subtext} />
-                    <meta name="og:description" content={this.props.subtext} />
-                    <meta name="theme-color" content={"#" + this.props.gradient[1]} />
-                    <meta name="og:theme-color" content={"#" + this.props.gradient[1]} />
-                    <meta name="author" content="Clicks Minute Per" />
-                    <meta name="og:author" content="Clicks Minute Per" />
-                </Head>
-                <img draggable={false} alt="" className={Styles.backgroundImage} src={`https://assets.clicksminuteper.net/${this.props.wave}.svg`} />
-                <div className={Styles.panel}>
-                    <div className={Styles.titleContainer}>
-                        <h1 className={Styles.title}>{this.props.name}</h1>
-                    </div>
-                    <p className={Styles.subtext + " " + (this.props.buttons.length ? Styles.subtextExtra : null)}>{this.props.subtext}</p>
-                    <div className={Styles.buttonLayout}>
+    return (
+        <div className={Styles.header} style={{
+            margin: "0",
+            minHeight: props.fullscreen ? "calc(100vh - 42px)" : "calc(100vh - (4 * max(2em, 4vw)) - 1em)",
+        }} id={props.id ? props.id : null}>
+            <div className={Styles.backgroundGradient} style={{
+                backgroundImage: `linear-gradient(69.44deg, #${props.gradient[0]} 0%, #${props.gradient[1]} 100%)`,
+            }} />
+            <Head>
+                <title>{props.name}</title>
+
+                <meta name="apple-mobile-web-app-capable" content="yes" />
+                <meta name="mobile-web-app-capable" content="yes" />
+                <meta name="viewport" content="width=device-width, minimal-ui" />
+
+                <meta name="title" content={props.name} />
+                <meta name="og:title" content={props.name} />
+                <meta name="description" content={props.embedDescription ? props.embedDescription : props.subtext} />
+                <meta name="og:description" content={props.embedDescription ? props.embedDescription : props.subtext} />
+                <meta name="author" content="Clicks" />
+                <meta name="og:author" content="Clicks" />
+                <meta name="image" content={props.embedImage} />
+                <meta name="og:image" content={props.embedImage} />
+
+                <meta name="theme-color" content={"#000000"} />
+                <meta name="og-color" content={"#" + props.gradient[1]} />
+                <meta name="msapplication-TileColor" content={"#000000"} />
+            </Head>
+            <img draggable={false} alt="" className={Styles.backgroundImage} src={`https://assets.clicks.codes/${props.wave}.svg`} />
+            <div className={Styles.panel}>
+                <div className={Styles.titleContainer}>
+                    <div onClick={confetti}>
                         {
-                            this.props.buttons ? this.props.buttons.map((button, index) => {
-                                return <a
-                                    key={index}
-                                    className={Styles.button}
-                                    style={{ backgroundColor: `#${button.color}`, color: `#${button.buttonText}` }}
-                                    href={button.link}
-                                    onClick={() => { if (button.id) { this.props.callback(this.props.that, button.id) } }}
-                                    target={button.target ? "_blank" : null}
-                                    rel="noreferrer">
-                                    {button.text}
-                                </a>
-                            }) : null
+                            props.customImage?
+                            <img height="64px" width="64px" alt={props.name} className={Styles.headerImage} style={{borderRadius: props.roundImage ? "100vw" : "0"}} src={props.customImage} />
+                            : <></>
                         }
                     </div>
+                    <h1 className={Styles.title}>{props.name}</h1>
                 </div>
-                <span className={Styles.arrowSpan + " " + (this.props.hideArrow ? Styles.arrowHidden : null)} draggable={false}>
-                    <a href="#start" draggable={false}><img alt="Down arrow" src="https://assets.clicksminuteper.net/web/icons/arrow.svg" className={Styles.arrow} draggable={false} style={{
-                        height: "49px", width: "87px"
-                    }}/></a>
-                </span>
+                <p className={Styles.subtext + " " + (props.buttons.length ? Styles.subtextExtra : null)}>{props.subtext}</p>
+                <a href="#skipNav" id="skipNav" style={{display: "none"}} />
+                { props.buttons.length ?
+                    <div className={Styles.buttonOverflow}>
+                        <img className={Styles.indicator + " " + Styles.leftArrow} draggable={false} alt="" src={`https://assets.clicks.codes/web/icons/arrow.svg`}/>
+                        <ScrollContainer
+                            vertical={false}
+                            horizontal={true}
+                            hideScrollbars={true}
+                            nativeMobileScroll={true}
+                            style={{borderRadius: "10px", height: "fit-content"}}
+                        >
+                            <div className={Styles.buttonLayout}>
+                                {
+                                    props.buttons ? props.buttons.map((button, index) => {
+                                        return <a
+                                            key={index}
+                                            className={Styles.button}
+                                            style={{ backgroundColor: `#${button.color}`, color: `#${button.buttonText}` }}
+                                            href={button.link}
+                                            onClick={() => { if (button.id) { props.callback(button.id) } }}
+                                            target={button.target ? "_blank" : null}
+                                            draggable={false}
+                                            rel="noreferrer">
+                                            {button.text}
+                                        </a>
+                                    }) : null
+                                }
+                            </div>
+                        </ScrollContainer>
+                        <img className={Styles.indicator + " " + Styles.rightArrow} draggable={false} alt="" src={`https://assets.clicks.codes/web/icons/arrow.svg`}/>
+                    </div> : <></>
+                }
             </div>
-        )
-    }
+            <div id="headerConfetti" />
+            <div id="disappointmentConfetti" />
+        </div>
+    )
 }
 
 export default Header;
\ No newline at end of file
diff --git a/Components/NavBar.js b/Components/NavBar.js
index 89ef25a..89c8fab 100644
--- a/Components/NavBar.js
+++ b/Components/NavBar.js
@@ -2,69 +2,35 @@
 import Styles from '../styles/Components/navbar.module.css';
 import ThemeChangeButton from './ThemeChangeButton';
 
+class Divider extends Component {
+    render() {
+        return (
+            <>
+                <div className={Styles.divider}></div>
+            </>
+        )
+    }
+}
 
 class NavBar extends Component {
 	constructor(props) {
 		super(props);
-        this.state = {
-            isOpen: false,
-        }
-        this.isTouchDevice = false
-        this.hoverSensor = React.createRef();
 	}
 
-    componentDidMount() {
-        let hasTouchScreen = false;
-        if ("maxTouchPoints" in navigator) {
-            hasTouchScreen = navigator.maxTouchPoints > 0;
-        } else if ("msMaxTouchPoints" in navigator) {
-            hasTouchScreen = navigator.msMaxTouchPoints > 0;
-        } else {
-            const mQ = window.matchMedia && matchMedia("(pointer:coarse)");
-            if (mQ && mQ.media === "(pointer:coarse)") {
-                hasTouchScreen = !!mQ.matches;
-            } else if ("orientation" in window) {
-                hasTouchScreen = true;
-            } else {
-                var UA = navigator.userAgent;
-                hasTouchScreen = /\b(BlackBerry|webOS|iPhone|IEMobile)\b/i.test(UA) || /\b(Android|Windows Phone|iPad|iPod)\b/i.test(UA);
-            }
-        }
-        if (hasTouchScreen) {
-            this.isTouchDevice = true
-        } else {
-            this.isTouchDevice = false
-        }
-    }
-
-    onClick() {
-        if ( this.isTouchDevice ) {
-            return this.toggleVertical(this)
-        }
-    }
-
-    toggleVertical(prevState, force=null) {
-        this.setState(prevState => ({
-            isOpen: (force === null) ? !prevState.isOpen : force
-        }));
-    }
-
 	render() {
 		return (
             <>
-                <div ref={this.hoverSensor} className={this.isTouchDevice ? (Styles.container + " " + (this.state.isOpen ? Styles.containerOpen : null)) : Styles.containerDesktop + " " + Styles.container}>
-                    <div className={Styles.group}>
-                        <img alt="CMP" className={Styles.headerIcon} src="https://assets.clicksminuteper.net/company/logo/circle.svg" onClick={() => {this.onClick()}}/>
-                        <a href="/#"><img alt="Home" className={Styles.icon} src="https://assets.clicksminuteper.net/web/icons/home.svg"/></a>
-                        <a href="/gps#"><img alt="GPS" className={Styles.icon} src="https://assets.clicksminuteper.net/bots/gps/circle.svg"/></a>
-                        <a href="/rsm#"><img alt="RSM" className={Styles.icon} src="https://assets.clicksminuteper.net/bots/rsm/circle.svg"/></a>
-                        <a href="/clicksforms#"><img alt="ClicksForms" className={Styles.icon} src="https://assets.clicksminuteper.net/bots/clicksforms/circle.svg"/></a>
-                        {/* <a href="/castaway#"><img className={Styles.icon} src="/Icons/CA.svg"/></a> */}
-                        {/* <a href="https://clcks.dev"><img className={Styles.icon} src="/Icons/CL.svg"/></a> */}
-                    </div>
-                    <div className={Styles.group}>
-                        <ThemeChangeButton/>
-                    </div>
+                <div className={Styles.container}>
+                    <a href="#skipNav" className={Styles.skipNav}>Skip navigation</a>
+                    <a className={Styles.icon} href="/"><img alt="Clicks" className={Styles.icon} src="https://assets.clicks.codes/web/logos/clicks.svg" /></a>
+                    <Divider />
+                    <a className={Styles.icon} href="/rsm"><img alt="RSM" className={Styles.icon} src="https://assets.clicks.codes/bots/rsm/circle.svg" /></a>
+                    {/* <a className={Styles.icon} href="/nucleus#"><img alt="Nucleus" className={Styles.icon} src="https://assets.clicks.codes/bots/nucleus/circle.svg" /></a> */}
+                    <a className={Styles.icon} href="/clicksforms"><img alt="ClicksForms" className={Styles.icon} src="https://assets.clicks.codes/bots/clicksforms/circle.svg" /></a>
+                    <a className={Styles.icon} href="/gps"><img alt="GPS" className={Styles.icon} src="https://assets.clicks.codes/bots/gps/circle.svg" /></a>
+                    <a className={Styles.icon} href="/hooky"><img alt="Hooky" className={Styles.icon} src="https://assets.clicks.codes/bots/hooky/circle.svg" /></a>
+                    <Divider />
+                    <ThemeChangeButton/>
                 </div>
             </>
 		)
diff --git a/Components/Panels.js b/Components/Panels.js
index e2e89d9..1ee500f 100644
--- a/Components/Panels.js
+++ b/Components/Panels.js
@@ -16,7 +16,7 @@
 	}
 
 	render() {
-		return <div className={Styles.panel} style={this.getStyle()} id={this.props.id}>
+		return <div className={Styles.panel} style={this.getStyle()} id={this.props.id} tabIndex={0}>
 				{
 					react.Children.toArray(this.props.children).map((child, index) => {
 						return child;
@@ -95,9 +95,15 @@
 }
 
 class Divider extends Component {
+	constructor(props) {
+		super(props);
+	}
+
 	render() {
-		// return <div className={Styles.divider} style={{ backgroundColor: this.props.bound == this.props.name ? "red" : "var(--theme-ui-colors-hint)"}}></div>
-		return <div className={Styles.divider} style={{ backgroundColor: "var(--theme-ui-colors-hint)"}}></div>
+		let highlighted = this.props.toHighlight === this.props.name;
+		return <div className={Styles.divider} style={{
+				backgroundColor: (highlighted && this.props.highlightColour) ? ("#" + this.props.highlightColour) : "var(--theme-ui-colors-hint)"
+			}}>{this.props.forceHighlight}</div>
 	}
 }
 
diff --git a/Components/Texttools.js b/Components/Texttools.js
index b8f6771..2233e9c 100644
--- a/Components/Texttools.js
+++ b/Components/Texttools.js
@@ -44,28 +44,15 @@
 		this.setState({isPopoverOpen: true})
 		setTimeout(() => {
 			this.setState({isPopoverOpen: false})
-		}, 1000)
+		}, 2000)
 	}
 
 	render() {
-		if ( this.props.clickable === false) {
-			return <pre
-				className={Styles.code}
-				style={{color: `#${this.props.colour}`, boxShadow: `0px -3px 10px 2px #424242`}}
-			>{this.props.children}</pre>
-		} else {
-			return <Popover
-				isOpen={this.state.isPopoverOpen}
-				positions={['top', 'bottom', 'left', 'right']} // preferred positions by priority
-				content={<Code colour={this.props.colour} clickable={false}>Copied!</Code>}
-			>
-				<pre
-					className={Styles.code}
-					style={{color: `#${this.props.colour}`}}
-					onClick={() => this.clicked()}
-				>{this.props.children}</pre>
-			</Popover>
-		}
+		return <pre
+			className={Styles.code}
+			style={{color: `#${this.props.colour}`}}
+			onClick={this.props.clickable ? () => this.clicked() : () => this.clicked()}
+		>{this.state.isPopoverOpen ? "Copied!" : this.props.children}</pre>
 	}
 }
 
diff --git a/Components/ThemeChangeButton.js b/Components/ThemeChangeButton.js
index 0a2151b..616c14a 100644
--- a/Components/ThemeChangeButton.js
+++ b/Components/ThemeChangeButton.js
@@ -13,16 +13,16 @@
     });
 
     return (
-        <header>
+        <>
             <a className={Styles.icon + " " + Styles.ThemeChangeButton} onClick={(e) => {
                 e.preventDefault();
                 setColorMode(colorMode === 'light' ? 'dark' : 'light');
-            }}>
-            {
-                !render ? null : (colorMode == 'light' ? <img alt="Light" src="https://assets.clicksminuteper.net/web/icons/light.svg" /> : <img alt="Dark" src="https://assets.clicksminuteper.net/web/icons/dark.svg" />)
-            }
+            }} href="#">
+                <img className={Styles.icon} alt="Theme" src={"https://assets.clicks.codes/web/icons/" + (
+                    colorMode == 'light' ? "light-white" : "dark"
+                ) + ".svg"} />
             </a>
-        </header>
+        </>
     )
 }
 
diff --git a/package.json b/package.json
index fb0032f..c59f7bb 100644
--- a/package.json
+++ b/package.json
@@ -4,12 +4,13 @@
   "private": true,
   "scripts": {
     "dev": "next dev",
-    "build": "next build",
+    "build": "ANALYZE=true NODE_OPTIONS=--openssl-legacy-provider NODE_ENV=production next build",
     "start": "next start",
     "lint": "next lint"
   },
   "dependencies": {
     "@emotion/is-prop-valid": "^1.1.1",
+    "@next/bundle-analyzer": "^12.1.6",
     "@svgr/webpack": "^5.5.0",
     "axios": "^0.21.1",
     "js-cookie": "^3.0.1",
@@ -17,17 +18,22 @@
     "mongodb": "^4.1.1",
     "next": "11.1.2",
     "next-redux-wrapper": "^7.0.4",
-    "react": "^17.0.2",
-    "react-dom": "^17.0.2",
+    "react": "^18.1.0",
+    "react-dom": "^18.1.0",
+    "react-draggable": "^4.4.5",
     "react-fade-in": "^2.0.1",
     "react-fast-marquee": "^1.3.1",
     "react-hcaptcha": "^0.1.1",
     "react-in-viewport": "^1.0.0-alpha.20",
+    "react-indiana-drag-scroll": "^2.1.0",
     "react-redux": "^7.2.4",
+    "react-rewards": "^2.0.3",
     "react-tiny-popover": "^7.0.1",
+    "react-use-draggable-scroll": "^0.4.2",
     "redux": "^4.1.1",
     "redux-thunk": "^2.3.0",
-    "theme-ui": "^0.12.0"
+    "theme-ui": "^0.12.0",
+    "use-draggable-scroll": "^0.1.0"
   },
   "devDependencies": {
     "eslint": "7.32.0",
diff --git a/pages/403.js b/pages/403.js
index 51da470..c6b966c 100644
--- a/pages/403.js
+++ b/pages/403.js
@@ -16,7 +16,6 @@
 					gradient={["F27878", "D96B6B"]}
 					wave="web/waves/header/rsm"
 					buttons={[{color: "F27878", buttonText: "ffffff", text: "Go Home", link: "/#"}]}
-					hideArrow={true}
 					fullscreen={true}
 				/>
 			</>
diff --git a/pages/404.js b/pages/404.js
index fc521ec..103c513 100644
--- a/pages/404.js
+++ b/pages/404.js
@@ -18,10 +18,9 @@
 					buttons={[
 						{color: "F27878", buttonText: "ffffff", text: "Go Home", link: "/#"},
 						{color: "F27878", buttonText: "ffffff", text: "Send Error",
-							link: `mailto:staff@clicksminuteper.net?subject=Website%20Error%20Report&body=I%20got%20a%20404%20on%20the%20page%20%5BPlease%20Copy%20Website%20Link%20Here%5D`,
+							link: `mailto:staff@clicks.codes?subject=Website%20Error%20Report&body=I%20got%20a%20404%20on%20the%20page%20%5BPlease%20Copy%20Website%20Link%20Here%5D`,
 							target: true
 					}]}
-					hideArrow={true}
 					fullscreen={true}
 				/>
 			</>
diff --git a/pages/418.js b/pages/418.js
index dd3b042..9fdf0cd 100644
--- a/pages/418.js
+++ b/pages/418.js
@@ -16,7 +16,6 @@
 					gradient={["F27878", "D96B6B"]}
 					wave="web/waves/header/rsm"
 					buttons={[{color: "F27878", buttonText: "ffffff", text: "Go Home", link: "/#"}]}
-					hideArrow={true}
 					fullscreen={true}
 				/>
 			</>
diff --git a/pages/500.js b/pages/500.js
index a39f019..3f74c40 100644
--- a/pages/500.js
+++ b/pages/500.js
@@ -18,10 +18,9 @@
 					buttons={[
 						{color: "F27878", buttonText: "ffffff", text: "Go Home", link: "/#"},
 						{color: "F27878", buttonText: "ffffff", text: "Send Error",
-							link: `mailto:staff@clicksminuteper.net?subject=Website%20Error%20Report&body=I%20got%20a%20500%20on%20the%20page%20%5BPlease%20Copy%20Website%20Link%20Here%5D`,
+							link: `mailto:staff@clicks.codes?subject=Website%20Error%20Report&body=I%20got%20a%20500%20on%20the%20page%20%5BPlease%20Copy%20Website%20Link%20Here%5D`,
 							target: true
 					}]}
-					hideArrow={true}
 					fullscreen={true}
 				/>
 			</>
diff --git a/pages/_app.js b/pages/_app.js
index f019489..2ed76e6 100644
--- a/pages/_app.js
+++ b/pages/_app.js
@@ -1,6 +1,7 @@
 import '../styles/globals.css';
 import NavBar from '../Components/NavBar';
 import { ThemeProvider } from 'theme-ui';
+import Styles from '../styles/globals.module.css';
 
 const theme = {
     config: {
@@ -42,8 +43,9 @@
 function App({ Component, pageProps }) {
   return <>
     <ThemeProvider theme={theme}>
-      <Component {...pageProps} />
       <NavBar />
+      <Component {...pageProps} />
+      <div className={Styles.container} />
     </ThemeProvider>
   </>
 }
diff --git a/pages/api/rsmv/validate.js b/pages/api/rsmv/validate.js
index 0133405..d73c467 100644
--- a/pages/api/rsmv/validate.js
+++ b/pages/api/rsmv/validate.js
@@ -1,30 +1,22 @@
-import { MongoClient } from 'mongodb';
+import Axios from 'axios';
 
-
-const url = 'mongodb://rsm:LJMy*orVFAATQ5PaX7EKXq74&HCDFaLE@192.168.101.2:27017/rsm';
-const db = 'rsm';
-const collection = 'rsmv-tokens'
-
-const Validate = (req, res) => {
-    return new Promise((resolve, reject) => {
-        MongoClient.connect(url, async function(err, client) {
-            let db_response = await client.db(db).collection(collection).findOne({code: req.body.code});
-
-            if (!db_response) return resolve(res.status(404).end());
-            if (db_response.timestamp + (1800) >= Date.now()) return resolve(res.status(410));
-
-            let props = {
-                user: db_response.user,
-                role: db_response.role,
-                role_name: db_response.role_name,
-                guild: db_response.guild,
-                guild_name: db_response.guild_name,
-                guild_icon_url: db_response.guild_icon_url,
-                guild_size: db_response.guild_size
-            }
-            return resolve(res.status(200).send(props));
-        })
-    })
+const Validate = async (req, res) => {
+    try {
+        var out = await Axios.get(`http://192.168.102.7:10000/verify/${req.body.code}`)
+        out = out.data
+        let props = {
+            user: out.user,
+            role: out.role,
+            role_name: out.role_name,
+            guild: out.guild,
+            guild_name: out.guild_name,
+            guild_icon_url: out.guild_icon_url,
+            guild_size: out.guild_size
+        }
+        return res.status(200).send(props)
+    } catch (err) {
+        return res.status(400).end()
+    }
 }
 
 export default Validate;
\ No newline at end of file
diff --git a/pages/castaway.js b/pages/castaway.js
index c82fbd0..9ad8ca8 100644
--- a/pages/castaway.js
+++ b/pages/castaway.js
@@ -12,7 +12,6 @@
         buttons={[
           {color: "78ECF2", buttonText: "000000", link: "#timeline", text: "Timeline"}
         ]}
-        hideArrow={true}
       />
       <AutoLayout>
         <Panel halfSize={false} id="timeline">
diff --git a/pages/clicksforms.js b/pages/clicksforms.js
index 35f55fb..e4d96dc 100644
--- a/pages/clicksforms.js
+++ b/pages/clicksforms.js
@@ -13,16 +13,17 @@
     };
   }
 
-  highlightSection(that, section) {
-    console.log(section);
-    that.setState({toHighlight: section});
+  highlightSection(section) {
+    this.setState({toHighlight: section});
   }
 
   render() {
     return (
       <>
         <Header
-          name="ClicksForms"
+          name={"Clicks​Forms"}
+          customImage={"https://assets.clicks.codes/web/logos/clicksforms.svg"}
+          embedImage="https://assets.clicks.codes/bots/clicksforms/normal.png"
           subtext="Custom forms on Discord"
           gradient={["71AFE5", "6576CC"]}
           wave="web/waves/header/clicksforms"
@@ -32,14 +33,12 @@
             {id: "privacy", color: "6576CC", buttonText: "FFFFFF", link: "#privacy", text: "Privacy"},
             {id: "invite", color: "775EBF", buttonText: "FFFFFF", link: "#invite", text: "Invite"}
           ]}
-          hideArrow={true}
-          that={this}
-          callback={this.highlightSection}
+          callback={() => this.highlightSection()}
         />
         <AutoLayout>
           <Panel halfSize={true} id="commands">
             <Title>Commands</Title>
-            <Divider bound={this.state.toHighlight} name="commands"/>
+            <Divider toHighlight={this.state.toHighlight} highlightColour="6576CC" name="commands"/>
             <Text>Standard commands to use ClicksForms</Text>
             <List colour="6576CC">
               <ListItem><Code colour="6576CC">/accept</Code> Completes a form you are asked to fill in.</ListItem>
@@ -51,34 +50,35 @@
               <ListItem><Code colour="6576CC">/manage</Code> Lets you manage your servers forms.</ListItem>
             </List>
           </Panel>
-          <Panel halfSize={true} id="services">
+          <Panel halfSize={true} id="services" style={this.state.toHighlight == "services" ? {border: "solid 10px red"} : {}}>
             <Title>Services</Title>
-            <Divider  bound={this.state.toHighlight} name="services"/>
+            <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>
             <Text>Our API is public. You can view it <Link href="/clicksforms/docs">here</Link>.</Text>
           </Panel>
           <Panel halfSize={true} id="privacy">
             <Title>Privacy</Title>
-            <Divider  bound={this.state.toHighlight} name="privacy"/>
+            <Divider toHighlight={this.state.toHighlight} highlightColour="6576CC" name="privacy"/>
             <Text>You should always know what we know and store about you, so <a href="https://clicksminuteper.github.io/policies/clicksforms">here</a> is the complete list.</Text>
             <Text>We also have a list of terms for using ClicksForms, it can be viewed <a href="https://clicksminuteper.github.io/policies/clicksformstos">here</a>.</Text>
           </Panel>
           <Panel halfSize={true} id="invite">
             <Title>Invite</Title>
-            <Divider  bound={this.state.toHighlight} name="invite"/>
+            <Divider toHighlight={this.state.toHighlight} highlightColour="6576CC" name="invite"/>
             <CardRow><Card
               wave="clicksforms"
               icon="bots/clicksforms/circle"
               buttonText={"FFFFFF"} gradient={["71AFE5", "6576CC"]}
-              title="Invite"
+              title="ClicksForms"
               subtext="Invite ClicksForms to your server"
               buttons={[
                 {color: "775EBF", link: "https://discord.com/api/oauth2/authorize?client_id=805392054678192169&permissions=2416307200&scope=bot%20applications.commands", text: "Invite"}
               ]}
+              url="https://discord.com/api/oauth2/authorize?client_id=805392054678192169&permissions=2416307200&scope=bot%20applications.commands"
             /></CardRow>
           </Panel>
         </AutoLayout>
       </>
     )
   }
-}
\ No newline at end of file
+}
diff --git a/pages/clicksforms/docs.js b/pages/clicksforms/docs.js
index cc2d584..46f3ee7 100644
--- a/pages/clicksforms/docs.js
+++ b/pages/clicksforms/docs.js
@@ -18,7 +18,6 @@
 //           {color: "6576CC", buttonText: "FFFFFF", link: "#structures", text: "Structures"},
 //           {color: "775EBF", buttonText: "FFFFFF", link: "#invite", text: "Invite"}
 //         ]}
-//         hideArrow={true}
 //       />
 //       <AutoLayout>
 //         <Panel halfSize={false} id="timeline">
diff --git a/pages/clicksforms/error/deleted.js b/pages/clicksforms/error/deleted.js
index 82fcc14..0d7a49b 100644
--- a/pages/clicksforms/error/deleted.js
+++ b/pages/clicksforms/error/deleted.js
@@ -14,7 +14,6 @@
                 gradient={["F27878", "D96B6B"]}
                 wave="web/waves/header/rsm"
                 buttons={[]}
-                hideArrow={true}
                 fullscreen={true}
             />
         )
diff --git a/pages/clicksforms/error/nocode.js b/pages/clicksforms/error/nocode.js
index 1f91d93..dfb7b6e 100644
--- a/pages/clicksforms/error/nocode.js
+++ b/pages/clicksforms/error/nocode.js
@@ -14,7 +14,6 @@
                 gradient={["F27878", "D96B6B"]}
                 wave="web/waves/header/rsm"
                 buttons={[]}
-                hideArrow={true}
                 fullscreen={true}
             />
         )
diff --git a/pages/clicksforms/error/unknown.js b/pages/clicksforms/error/unknown.js
index 4cb9bea..e3ab125 100644
--- a/pages/clicksforms/error/unknown.js
+++ b/pages/clicksforms/error/unknown.js
@@ -14,7 +14,6 @@
                 gradient={["F27878", "D96B6B"]}
                 wave="web/waves/header/rsm"
                 buttons={[]}
-                hideArrow={true}
                 fullscreen={true}
             />
         )
diff --git a/pages/clicksforms/form.js b/pages/clicksforms/form.js
index 47b2275..c950e73 100644
--- a/pages/clicksforms/form.js
+++ b/pages/clicksforms/form.js
@@ -9,7 +9,6 @@
 }
 
 	render() {
-        console.log(this.props)
 		return (
 			<>
                 <Header
@@ -19,7 +18,6 @@
                     wave="web/waves/header/clicksforms"
                     buttons={[]}
                 />
-                <div id="start" />
                 <div className={Styles.form}>
                     <div className={Styles.header}>
                         Once completing this.props, your response will be recorded
@@ -51,7 +49,6 @@
 }
 
 export async function getServerSideProps(ctx) {
-    console.log("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA")
     if(!ctx.query.code) {
         return {
             redirect: {
@@ -60,11 +57,10 @@
             }
         }
     }
-    const code = fetch(`https://cf.bots.clicksminuteper.net/code/${ctx.query.code}/token/BkjTUmNPk8S1aPVIYBt8rAUGQF692C8BEscJS9jGDwEtDJcy78uCVsHgRI1dspseGFoatakhWPHTAmYH42zhPpOjoaN1N9eLU7hB`, {
+    const code = fetch(`https://cf.bots.clicks.codes/code/${ctx.query.code}/token/BkjTUmNPk8S1aPVIYBt8rAUGQF692C8BEscJS9jGDwEtDJcy78uCVsHgRI1dspseGFoatakhWPHTAmYH42zhPpOjoaN1N9eLU7hB`, {
         method: "GET",
         mode: "cors"
     })
-    console.log(code)
     if ( (await code).status == 404 ) {
         return {
             redirect: {
@@ -81,8 +77,6 @@
         }
     }
 
-    console.log(code.data)
-
     return {
         props: {
             data: code.data
diff --git a/pages/cpm.js b/pages/cpm.js
index e3cf768..97bffee 100644
--- a/pages/cpm.js
+++ b/pages/cpm.js
@@ -1,3 +1,5 @@
+/* This file has been kept as part of the easter egg. No domain will redirect to it. The page will not be updated in the future. */
+
 import { Card, CardRow } from '../Components/Card';
 import Header from '../Components/Header';
 import { AutoLayout, Panel, Title, Subtitle, Text, Divider } from '../Components/Panels';
@@ -12,7 +14,6 @@
         wave="web/waves/header/cmp"
         buttons={[]}
       />
-      <p id="start" />
       <AutoLayout>
         <Panel halfSize={false}>
           <Title>Projects</Title>
diff --git a/pages/gps.js b/pages/gps.js
index 971c419..8b2e194 100644
--- a/pages/gps.js
+++ b/pages/gps.js
@@ -16,7 +16,6 @@
           {color: "71AFE5", buttonText: "FFFFFF", link: "#commands", text: "Commands"},
           {color: "6576CC", buttonText: "FFFFFF", link: "#invite", text: "Invite"}
         ]}
-        hideArrow={true}
       />
       <AutoLayout>
         <Panel halfSize={false} id="features">
@@ -88,11 +87,12 @@
               wave="gps"
               icon="bots/gps/circle"
               buttonText={"FFFFFF"} gradient={["78ECF2", "71AFE5"]}
-              title="Invite"
+              title="GPS"
               subtext="Invite GPS to your server"
               buttons={[
                 {color: "6576CC", link: "https://discordapp.com/oauth2/authorize?client_id=679361555732627476&scope=bot&permissions=130048", text: "Invite"}
               ]}
+              url="https://discordapp.com/oauth2/authorize?client_id=679361555732627476&scope=bot&permissions=130048"
             />
           </CardRow>
         </Panel>
diff --git a/pages/hooky.js b/pages/hooky.js
index f8fe17f..b204daf 100644
--- a/pages/hooky.js
+++ b/pages/hooky.js
@@ -13,7 +13,6 @@
         buttons={[
           {color: "EDC575", buttonText: "000000", link: "#invite", text: "Invite"}
         ]}
-        hideArrow={true}
       />
       <AutoLayout>
         <Panel halfSize={false} id="invite">
@@ -24,11 +23,12 @@
               wave="hooky"
               icon="bots/hooky/circle"
               buttonText={"000000"} gradient={["424242", "8D8D8D"]}
-              title="Invite"
+              title="Hooky"
               subtext="Invite Hooky to your server"
               buttons={[
                 {color: "EDC575", link: "https://discord.com/oauth2/authorize?client_id=752188923505279037&scope=bot&permissions=536882176", text: "Invite"}
               ]}
+              url="https://discord.com/oauth2/authorize?client_id=752188923505279037&scope=bot&permissions=536882176"
             />
           </CardRow>
         </Panel>
diff --git a/pages/index.js b/pages/index.js
index a72d401..f801b79 100644
--- a/pages/index.js
+++ b/pages/index.js
@@ -6,13 +6,15 @@
   return (
     <>
       <Header
-        name="Clicks Minute Per"
-        subtext="Custom Made Programs"
+        name="Clicks"
+        subtext="// TODO: Fix this massive security issue"
+        customImage="https://assets.clicks.codes/web/logos/clicks.svg"
+        embedImage="https://assets.clicks.codes/web/logos/clicks.png"
         gradient={["6576CC", "4B5899"]}
         wave="web/waves/header/cmp"
         buttons={[]}
+        index={true}
       />
-      <p id="start" />
       <AutoLayout>
         <Panel halfSize={false}>
           <Title>Projects</Title>
@@ -23,46 +25,50 @@
               icon="bots/gps/circle"
               buttons={[
                 {color: "6576CC", link: "https://discordapp.com/oauth2/authorize?client_id=679361555732627476&scope=bot&permissions=130048", text: "Invite"},
+                {color: "6576CC", link: "/gps", text: "About"}
               ]}
               buttonText={"FFFFFF"} gradient={["78ECF2", "71AFE5"]}
+              url="/gps"
             />
             <Card
               wave="rsm" title="RSM" subtext="Moderation Redefined"
               icon="bots/rsm/circle"
               buttons={[
                 {color: "424242", link: "https://discord.com/api/oauth2/authorize?client_id=715989276382462053&permissions=121295465718&scope=bot%20applications.commands",text:"Invite"},
+                {color: "424242", link: "/rsm", text:"About"}
               ]}
               buttonText={"FFFFFF"} gradient={["F27878", "D96B6B"]}
+              url="/rsm"
             />
             <Card
               wave="clicksforms" title="ClicksForms" subtext="Create custom forms for Discord"
               icon="bots/clicksforms/circle"
               buttons={[
+                {color: "775EBF", link: "https://clicksminuteper.github.io/docs/clicksforms", text:"API", newTab: true},
                 {color: "775EBF", link: "https://discord.com/api/oauth2/authorize?client_id=805392054678192169&permissions=2416307200&scope=bot%20applications.commands",text:"Invite"},
+                {color: "775EBF", link: "/clicksforms", text: "About"}
               ]}
               buttonText={"FFFFFF"} gradient={["71AFE5", "6576CC"]}
+              url="/clicksforms"
             />
             <Card
               wave="castaway" title="Castaway" subtext="Stranded on Discord"
               icon="bots/castaway/circle"
               buttons={[
+                {color: "F2D478", link: "/castaway", text: "About"}
               ]}
               buttonText={"000000"} gradient={["71AFE5", "78ECF2"]}
+              url="/castaway"
             />
             <Card
               wave="hooky" title="Hooky" subtext="Webhook protection for Discord"
               icon="bots/hooky/circle"
               buttons={[
                 {color: "EDC575", link: "https://discord.com/oauth2/authorize?client_id=752188923505279037&scope=bot&permissions=536882176", text: "Invite"},
+                {color: "EDC575", link: "/hooky", text: "About"}
               ]}
               buttonText={"000000"} gradient={["424242", "8D8D8D"]}
-            />
-            <Card
-              wave="clcks" title="Clcks" subtext="Clicks Minute Per web apps"
-              icon="web/icons/clcks"
-              buttons={[
-              ]}
-              buttonText={"000000"} gradient={["C4C4C4", "8D8D8D"]}
+              url="/hooky"
             />
           </CardRow>
         </Panel>
@@ -78,6 +84,7 @@
                 {color: "424242", link: "https://github.com/clicksminuteper", text: "Visit"}
               ]}
               buttonText={"FFFFFF"} gradient={["FFFFFF", "C4C4C4"]}
+              url="https://github.com/clicksminuteper"
             />
             <Card
               wave="pypi" title="PyPi" subtext="View our modules for python"
@@ -86,6 +93,7 @@
                 {color: "FFC91E", link: "https://pypi.org/user/ClicksMinutePer/", text: "Visit"}
               ]}
               buttonText={"000000"} gradient={["2F6490", "3775A8"]}
+              url="https://pypi.org/user/ClicksMinutePer/"
             />
           </CardRow>
         </Panel>
@@ -94,14 +102,15 @@
           <Divider />
           <Text>Talk to us and ask us anything!</Text>
           <CardRow>
-          <Card
-            wave="discord" title="Discord" subtext="Join our Discord server to talk with the community"
-            icon="web/icons/discord"
-            buttons={[
-              {color: "404EED", link: "https://discord.gg/bPaNnxe", text: "Join"}
-            ]}
-            buttonText={"FFFFFF"} gradient={["404EED", "404EED"]}
-          />
+            <Card
+              wave="discord" title="Discord" subtext="Join our Discord server to talk with the community"
+              icon="web/icons/discord"
+              buttons={[
+                {color: "404EED", link: "https://discord.gg/bPaNnxe", text: "Join"}
+              ]}
+              buttonText={"FFFFFF"} gradient={["404EED", "404EED"]}
+              url="https://discord.gg/bPaNnxe"
+            />
           </CardRow>
         </Panel>
       </AutoLayout>
diff --git a/pages/rsm.js b/pages/rsm.js
index 8f63c30..b1e9233 100644
--- a/pages/rsm.js
+++ b/pages/rsm.js
@@ -28,7 +28,6 @@
           {color: "424242", buttonText: "FFFFFF", link: "#privacy", text: "Privacy"},
           {color: "F27878", buttonText: "FFFFFF", link: "#invite", text: "Invite"}
         ]}
-        hideArrow={true}
       />
       <AutoLayout>
         <Panel halfSize={true} id="commands">
@@ -100,11 +99,12 @@
               wave="rsm"
               icon="bots/rsm/circle"
               buttonText={"FFFFFF"} gradient={["F27878", "D96B6B"]}
-              title="Invite"
+              title="RSM"
               subtext="Invite RSM 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>
diff --git a/pages/rsmv/failure.js b/pages/rsmv/failure.js
index 1248893..f3b0feb 100644
--- a/pages/rsmv/failure.js
+++ b/pages/rsmv/failure.js
@@ -10,11 +10,10 @@
         return (
             <Header
                 name="Verification failed"
-                subtext={<p>Please try again, and if the error persists please contact us at <a href="mailto:verification@clicksminuteper.net" target="_blank" rel="noopener noreferrer">verification@clicksminuteper.net</a></p>}
+                subtext={<p>Please try again, and if the error persists please contact us at <a href="mailto:verification@clicks.codes" target="_blank" rel="noopener noreferrer">verification@clicks.codes</a></p>}
                 gradient={["F27878", "D96B6B"]}
                 wave="web/waves/header/rsm"
                 buttons={[]}
-                hideArrow={true}
                 fullscreen={true}
             />
         )
diff --git a/pages/rsmv/index.js b/pages/rsmv/index.js
index 12f4dea..175a271 100644
--- a/pages/rsmv/index.js
+++ b/pages/rsmv/index.js
@@ -57,7 +57,6 @@
             gid:cls.props.gID,
             code:cls.props.code
         });
-        console.log(code.status)
         if (code.status === 200 ) return Router.push('/rsmv/success','/rsmv')
         else return Router.push('/rsmv/failure','/rsmv')
     }
@@ -65,20 +64,13 @@
     render() {
         return <>
             <Header
-                name={
-                    <>
-                        <img alt="Server icon" style={{borderRadius: "50%", height: "64px", width: "auto"}} src={this.props.guild_icon_url} />
-                        <br />
-                        {this.props.guild_name}
-                    </>
-                }
-                nameOverwrite="Verify"
+                name="Verify"
+                customImage={this.props.guild_icon_url}
                 subtext={`${this.props.memberCount} members`}
                 gradient={["F27878", "D96B6B"]}
                 wave="web/waves/header/rsm"
                 buttons={[]}
             />
-            <p id="start" />
             <AutoLayout>
                 <Panel>
                     <Text>Complete the check below to join {this.props.guild_name}</Text>
diff --git a/pages/rsmv/rsmvtesting.js b/pages/rsmv/rsmvtesting.js
index 4a271fa..8587221 100644
--- a/pages/rsmv/rsmvtesting.js
+++ b/pages/rsmv/rsmvtesting.js
@@ -47,7 +47,6 @@
             gid:cls.props.gID,
             code:cls.props.code
         });
-        console.log(code.status)
         if (code.status === 200 ) return Router.push('/rsmv/success','/rsmv')
         else return Router.push('/rsmv/failure','/rsmv')
     }
@@ -68,7 +67,6 @@
                 wave="web/waves/header/rsm"
                 buttons={[]}
             />
-            <p id="start" />
             <AutoLayout>
                 <Panel>
                     <Text>Complete the check below to join ERROR</Text>
diff --git a/pages/rsmv/success.js b/pages/rsmv/success.js
index 484c0bf..3cf1e4f 100644
--- a/pages/rsmv/success.js
+++ b/pages/rsmv/success.js
@@ -14,7 +14,6 @@
                 gradient={["65CC76", "60B258"]}
                 wave="web/waves/header/rsm"
                 buttons={[]}
-                hideArrow={true}
                 fullscreen={true}
             />
         )
diff --git a/pages/support.js b/pages/support.js
index b89df34..1c35a68 100644
--- a/pages/support.js
+++ b/pages/support.js
@@ -16,7 +16,7 @@
         <Panel halfSize={true}>
           <Title>Email</Title>
           <Divider />
-          <Text>Send us an email at <a href="mailto:support@clicksminuteper.net">support@clicksminuteper.net</a> and we will get back to you as quick as possible.</Text>
+          <Text>Send us an email at <a href="mailto:support@clicks.codes">support@clicks.codes</a> and we will get back to you as quick as possible.</Text>
         </Panel>
         <Panel halfSize={true}>
           <Title>Discord</Title>
diff --git a/pages/supporters.js b/pages/supporters.js
index d456f35..d07482e 100644
--- a/pages/supporters.js
+++ b/pages/supporters.js
@@ -88,7 +88,6 @@
                 gradient={["71AFE5", "6576CC"]}
                 wave="web/waves/header/clicksforms"
                 buttons={[]}
-                hideArrow={true}
             />
             <AutoLayout>
                 <Panel halfSize={false}>
diff --git a/styles/Components/card.module.css b/styles/Components/card.module.css
index 775be5c..5b269fa 100644
--- a/styles/Components/card.module.css
+++ b/styles/Components/card.module.css
@@ -33,11 +33,9 @@
 	margin: 100px;
 	transition: filter 0.3s ease-in-out;
 	transition: transform 0.15s ease-in-out;
-
-	transition: all 10s ease-in-out;
 }
 .card:hover {
-	transform: scale(1.025);
+	transform: translateY(-5px);
 	cursor: pointer;
 }
 
@@ -121,9 +119,6 @@
 }
 
 @media (max-width: 500px) {
-	.card {
-		height: 254px;
-	}
 }
 
 
diff --git a/styles/Components/header.module.css b/styles/Components/header.module.css
index d37417d..e37ea1c 100644
--- a/styles/Components/header.module.css
+++ b/styles/Components/header.module.css
@@ -1,11 +1,13 @@
 .backgroundImage {
 	position: absolute;
-	bottom: -10px;
-	width: calc(100% + 6px);
-	border-radius: 0 0 16.5px 16.5px;
+	bottom: 0;
+	/* bottom: 50vh;
+	transform: translateY(50%); */
+	width: 100%;
 	filter: var(--theme-ui-colors-cardFilter);
 	transition: filter 0.3s ease-in-out;
 }
+
 .backgroundGradient {
 	position: absolute;
 	bottom: 0;
@@ -53,6 +55,7 @@
     color: var(--theme-ui-colors-text);
 	transition: color 0.3s ease-in-out;
 	word-break: break-word;
+	font-variant-ligatures: none;
 }
 
 .subtext {
@@ -70,52 +73,33 @@
     margin-bottom: 40px;
 }
 
-@keyframes arrow-slide {
-    0% {
-        -webkit-transform: translateY(0);
-                transform: translateY(0);
-    }
-    50% {
-        -webkit-transform: translateY(-1em);
-                transform: translateY(-1em);
-    }
-    100% {
-        -webkit-transform: translateY(0);
-                transform: translateY(0);
-    }
-}
-.arrow {
-    -webkit-animation: arrow-slide 2s ease-in-out infinite both;
-            animation: arrow-slide 2s ease-in-out infinite both;
-}
-
-.arrowSpan {
-    position: absolute;
-    bottom: min(10vh, 1em);
-    width: 100%;
-    text-align: center;
-}
-
-.arrowHidden {
-    display: none;
-}
-
 .buttonLayout {
 	display: flex;
 	flex-direction: row;
+	justify-content: flex-start;
+	align-items: center;
+	flex-wrap: nowrap;
+	height: fit-content;
+}
+.buttonOverflow {
+	display: flex;
+	flex-direction: row;
 	justify-content: flex-end;
 	align-items: center;
-	flex-wrap: wrap;
-	padding: 0px;
+	overflow-x: hidden;
+	flex-wrap: nowrap;
 	position: absolute;
 	bottom: 5px;
 	right: 5px;
+	width: calc(100% - 10px);
+	height: auto;
+	border-radius: 10px;
 }
 
 .button {
 	display: flex;
 	flex-direction: row;
-	align-items: flex-start;
+	align-items: flex-end;
 	justify-content: right;
 	position: static;
 	flex: none;
@@ -126,3 +110,35 @@
 	padding: 5px 10px;
 	border-radius: 8px;
 }
+
+.titleContainer {
+	display: flex;
+	flex-direction: row;
+	justify-content: center;
+	align-items: center;
+	flex-wrap: wrap;
+	padding: 0px;
+}
+
+.headerImage {
+	width: auto;
+	height: 64px;
+	object-fit: cover;
+	object-position: center;
+	transition: filter 0.3s ease-in-out;
+	margin-bottom: 20px;
+}
+
+.indicator {
+	height: auto;
+	width: 24px;
+	margin-inline: 5px;
+	padding: 0;
+}
+
+.leftArrow {
+	transform: rotate(90deg);
+}
+.rightArrow {
+	transform: rotate(270deg);
+}
\ No newline at end of file
diff --git a/styles/Components/navbar.module.css b/styles/Components/navbar.module.css
index 88aa580..ecbf786 100644
--- a/styles/Components/navbar.module.css
+++ b/styles/Components/navbar.module.css
@@ -1,134 +1,45 @@
-.container {
-    display: flex;
-    flex-direction: column;
-    justify-content: top;
-    align-items: center;
+.icon {
+    height: 32px;
+    margin: 0;
+    padding: 0;
+    width: 32px;
+}
 
+.container {
     position: fixed;
     top: 0;
-    left: 0;
+    display: flex;
+    justify-content: left;
+    align-items: center;
+    flex-direction: row;
+    gap: 10px;
+
+    height: 42px;
+    padding: 5px;
+    padding-left: 25px;
+
+    z-index: 69;
+}
+
+.divider {
+    height: 100%;
+    width: 3px;
+    border-radius: 100vh;
+    background-color: #424242;
+}
+
+.skipNav {
+    width: 0%;
     overflow: hidden;
-    margin: 20px;
-
-    width: 64px;
-    max-height: 64px;
-    padding-bottom: -1px;
-    height: auto;
-
-    border-radius: 32px;
-    transition: 0.5s ease-in-out;
-}
-.group {
-    display: flex;
-    flex-direction: column;
-    justify-content: top;
-    align-items: center;
-
-    background-color: var(--theme-ui-colors-cardBackground);
-    transition: background-color 0.3s ease-in-out;
-    backdrop-filter: blur(2px);
-    border-radius: 32px;
-
-    width: 64px;
-    margin-bottom: 20px;
-    padding-top: 7px;
+    color: white;
+    max-lines: 1;
+    text-overflow: clip;
+    -webkit-line-clamp: 1;
+    height: 20px;
+    transition: width 0.3s ease-in-out;
 }
 
-.headerIcon {
-    height: 64px;
-    width: 64px;
-    margin-bottom: 20px;
-    margin-right: 0;
-    margin-top: -7px;
-    border-radius: 50vw;
-
-    cursor: pointer;
-}
-
-.icon {
-    height: 50px;
-    width: 50px;
-    border-radius: 50vw;
-    margin-bottom: 5px;
-    cursor: pointer;
-    display: block;
-}
-
-.ThemeChangeButton {
-    display: flex;
-    justify-content: center;
-    align-items: center;
-}
-
-.containerOpen {
-    max-height: 460px;
-}
-
-.containerDesktop {
-    animation-name: containerCloseOnStart;
-    animation-duration: 0.5s;
-    animation-direction: forwards;
-    animation-timing-function: ease-in-out;
-}
-
-@keyframes containerCloseOnStart {
-    from { max-height: 460px; }
-    to { max-height: 64px ; }
-}
-
-.containerDesktop:hover {
-    max-height: 460px;
-    animation-name: none;
-}
-
-@media screen and (min-width: 450px) {
-    .container {
-        flex-direction: row;
-        justify-content: left;
-
-        margin: 20px;
-
-        height: 64px;
-        max-width: 64px;
-        width: auto;
-        border-radius: 32px;
-
-        border-radius: 32px;
-        transition: 0.5s ease-in-out;
-    }
-    .group {
-        flex-direction: row;
-        justify-content: left;
-
-        height: 64px;
-        width: auto;
-        padding-right: 7px;
-        margin-bottom: 0;
-        padding-top: 7px;
-        margin-right: 20px;
-        padding-left: 3px;
-    }
-    .headerIcon {
-        height: 64px;
-        width: 64px;
-        margin-top: 12px;
-        margin-left: -3px;
-    }
-    .containerOpen {
-        max-width: 460px;
-        max-height: 64px;
-    }
-    .containerDesktop:hover {
-        max-width: 460px;
-        max-height: 64px;
-    }
-    .icon {
-        height: 50px;
-        width: 50px;
-        margin-left: 5px;
-    }
-    @keyframes containerCloseOnStart {
-        from { max-width: 460px; }
-        to { max-width: 64px ; }
-    }
-}
+.skipNav:focus {
+    width: 100%;
+    overflow: auto;
+}
\ No newline at end of file
diff --git a/styles/Components/panels.module.css b/styles/Components/panels.module.css
index 2229866..35096b2 100644
--- a/styles/Components/panels.module.css
+++ b/styles/Components/panels.module.css
@@ -12,8 +12,6 @@
 
     background-color: var(--theme-ui-colors-panelColor);
     border-radius: 20px;
-    transition: background-color 0.3s ease-in-out;
-
 }
 
 .doublePanel {
@@ -51,7 +49,7 @@
 
 .title {
     width: 100%;
-    font-size: max(2em, 3.25vw);
+    font-size: min(max(2em, 3.25vw), 4em);
     margin: 0;
     color: var(--theme-ui-colors-text);
     transition: color 0.3s ease-in-out;
diff --git a/styles/Components/texttools.module.css b/styles/Components/texttools.module.css
index b07fd6d..76857b9 100644
--- a/styles/Components/texttools.module.css
+++ b/styles/Components/texttools.module.css
@@ -3,7 +3,7 @@
     width: 15px !important;
     position: relative;
     border-radius: 5px;
-    border: solid 4px #000;
+    border: solid 3px #000;
 }
 
 .list {
diff --git a/styles/globals.css b/styles/globals.css
index 1b39e04..4fac2dc 100644
--- a/styles/globals.css
+++ b/styles/globals.css
@@ -9,10 +9,35 @@
 }
 
 html {
-  background-color: var(--theme-ui-colors-background);
+  /* background-color: var(--theme-ui-colors-background); */
 	transition: background-color 0.3s ease-in-out;
+  background-color: #000000 !important;
+  transition: 0.3s ease-in-out border-radius;
+  border-radius: 0px;
+}
+body {
+  background-color: var(--theme-ui-colors-background);
+  overflow: hidden;
+  overflow-y: auto;
+  transition: 0.3s ease-in-out border-radius;
+  padding-bottom: 0;
+  border-radius: 25px;
 }
 
+body {
+  height: 100%;
+  overflow: hidden;
+}
+html {
+  position: absolute;
+  top: 42px;
+  height: calc(100vh -42px + 1px);
+  overflow-y: auto;
+  scrollbar-width: none;
+}
+html::-webkit-scrollbar {
+  display: none;
+}
 
 a {
   text-decoration: none;
diff --git a/yarn.lock b/yarn.lock
index ec57c75..ae38cb2 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1174,6 +1174,13 @@
   resolved "https://registry.npmjs.org/@napi-rs/triples/-/triples-1.0.3.tgz"
   integrity sha512-jDJTpta+P4p1NZTFVLHJ/TLFVYVcOqv6l8xwOeBKNPMgY/zDYH/YH7SJbvrr/h1RcS9GzbPcLKGzpuK9cV56UA==
 
+"@next/bundle-analyzer@^12.1.6":
+  version "12.1.6"
+  resolved "https://registry.yarnpkg.com/@next/bundle-analyzer/-/bundle-analyzer-12.1.6.tgz#5f4efcdb8c91d70c8be6013b0aacdb4d89ba1312"
+  integrity sha512-WLydwytAeHoC/neXsiIgK+a6Me12PuSpwopnsZgX5JFNwXQ9MlwPeMGS3aTZkYsv8QmSm0Ns9Yh9FkgLKYaUuQ==
+  dependencies:
+    webpack-bundle-analyzer "4.3.0"
+
 "@next/env@11.1.2":
   version "11.1.2"
   resolved "https://registry.npmjs.org/@next/env/-/env-11.1.2.tgz"
@@ -1261,6 +1268,11 @@
     "@nodelib/fs.scandir" "2.1.5"
     fastq "^1.6.0"
 
+"@polka/url@^1.0.0-next.20":
+  version "1.0.0-next.21"
+  resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.21.tgz#5de5a2385a35309427f6011992b544514d559aa1"
+  integrity sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==
+
 "@rushstack/eslint-patch@^1.0.6":
   version "1.0.6"
   resolved "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.0.6.tgz"
@@ -1665,11 +1677,21 @@
   resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz"
   integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
 
+acorn-walk@^8.0.0:
+  version "8.2.0"
+  resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1"
+  integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==
+
 acorn@^7.4.0:
   version "7.4.1"
   resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz"
   integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
 
+acorn@^8.0.4:
+  version "8.7.1"
+  resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.1.tgz#0197122c843d1bf6d0a5e83220a788f278f63c30"
+  integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==
+
 ajv@^6.10.0, ajv@^6.12.4:
   version "6.12.6"
   resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz"
@@ -2099,7 +2121,7 @@
     ansi-styles "^4.1.0"
     supports-color "^7.1.0"
 
-chalk@^4.0.0:
+chalk@^4.0.0, chalk@^4.1.0:
   version "4.1.2"
   resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz"
   integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
@@ -2135,6 +2157,16 @@
   resolved "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz"
   integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==
 
+classnames@^2.2.6:
+  version "2.3.1"
+  resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.1.tgz#dfcfa3891e306ec1dad105d0e88f4417b8535e8e"
+  integrity sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==
+
+clsx@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.1.tgz#98b3134f9abbdf23b2663491ace13c5c03a73188"
+  integrity sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==
+
 coa@^2.0.2:
   version "2.0.2"
   resolved "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz"
@@ -2173,6 +2205,11 @@
   resolved "https://registry.npmjs.org/colorette/-/colorette-1.3.0.tgz"
   integrity sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w==
 
+commander@^6.2.0:
+  version "6.2.1"
+  resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c"
+  integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==
+
 commondir@^1.0.1:
   version "1.0.1"
   resolved "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz"
@@ -2374,6 +2411,11 @@
   resolved "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz"
   integrity sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==
 
+debounce@^1.2.0:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.1.tgz#38881d8f4166a5c5848020c11827b834bcb3e0a5"
+  integrity sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==
+
 debug@2, debug@^2.6.9:
   version "2.6.9"
   resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz"
@@ -2503,6 +2545,16 @@
     dom-serializer "0"
     domelementtype "1"
 
+duplexer@^0.1.2:
+  version "0.1.2"
+  resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6"
+  integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==
+
+easy-bem@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/easy-bem/-/easy-bem-1.1.1.tgz#1bfcc10425498090bcfddc0f9c000aba91399e03"
+  integrity sha512-GJRqdiy2h+EXy6a8E6R+ubmqUM08BK0FWNq41k24fup6045biQ8NXxoXimiwegMQvFFV3t1emADdGNL1TlS61A==
+
 electron-to-chromium@^1.3.723, electron-to-chromium@^1.4.17:
   version "1.4.68"
   resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.68.tgz"
@@ -3059,6 +3111,13 @@
   resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz"
   integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==
 
+gzip-size@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462"
+  integrity sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==
+  dependencies:
+    duplexer "^0.1.2"
+
 has-bigints@^1.0.1:
   version "1.0.1"
   resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz"
@@ -3573,6 +3632,11 @@
   resolved "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz"
   integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=
 
+lodash@^4.17.20:
+  version "4.17.21"
+  resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
+  integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
+
 loose-envify@^1.1.0, loose-envify@^1.4.0:
   version "1.4.0"
   resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz"
@@ -3692,6 +3756,11 @@
   optionalDependencies:
     saslprep "^1.0.3"
 
+mrmime@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-1.0.0.tgz#14d387f0585a5233d291baba339b063752a2398b"
+  integrity sha512-a70zx7zFfVO7XpnQ2IX1Myh9yY4UYvfld/dikWRnsXxbyvMcfz+u6UfgNAtH+k2QqtJuzVpv6eLTx1G2+WKZbQ==
+
 ms@2.0.0:
   version "2.0.0"
   resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz"
@@ -3940,6 +4009,11 @@
   dependencies:
     wrappy "1"
 
+opener@^1.5.2:
+  version "1.5.2"
+  resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598"
+  integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==
+
 optionator@^0.9.1:
   version "0.9.1"
   resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz"
@@ -4187,6 +4261,15 @@
     object-assign "^4.1.1"
     react-is "^16.8.1"
 
+prop-types@^15.8.1:
+  version "15.8.1"
+  resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5"
+  integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==
+  dependencies:
+    loose-envify "^1.4.0"
+    object-assign "^4.1.1"
+    react-is "^16.13.1"
+
 public-encrypt@^4.0.0:
   version "4.0.3"
   resolved "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz"
@@ -4271,14 +4354,21 @@
     iconv-lite "0.4.24"
     unpipe "1.0.0"
 
-react-dom@^17.0.2:
-  version "17.0.2"
-  resolved "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz"
-  integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==
+react-dom@^18.1.0:
+  version "18.1.0"
+  resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.1.0.tgz#7f6dd84b706408adde05e1df575b3a024d7e8a2f"
+  integrity sha512-fU1Txz7Budmvamp7bshe4Zi32d0ll7ect+ccxNu9FlObT605GOEB8BfO4tmRJ39R5Zj831VCpvQ05QPBW5yb+w==
   dependencies:
     loose-envify "^1.1.0"
-    object-assign "^4.1.1"
-    scheduler "^0.20.2"
+    scheduler "^0.22.0"
+
+react-draggable@^4.4.5:
+  version "4.4.5"
+  resolved "https://registry.yarnpkg.com/react-draggable/-/react-draggable-4.4.5.tgz#9e37fe7ce1a4cf843030f521a0a4cc41886d7e7c"
+  integrity sha512-OMHzJdyJbYTZo4uQE393fHcqqPYsEtkjfMgvCHr6rejT+Ezn4OZbNyGH50vv+SunC1RMvwOTSWkEODQLzw1M9g==
+  dependencies:
+    clsx "^1.1.1"
+    prop-types "^15.8.1"
 
 react-fade-in@^2.0.1:
   version "2.0.1"
@@ -4302,6 +4392,15 @@
   dependencies:
     hoist-non-react-statics "^3.0.0"
 
+react-indiana-drag-scroll@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/react-indiana-drag-scroll/-/react-indiana-drag-scroll-2.1.0.tgz#37654eae8caced01cdecc8bce55f0382871a021d"
+  integrity sha512-Tj94Dv9PkmoKqc9nxK/dzwhtE8pP7NTxmeHqkD8KN0zad1NNE+/JsvRcK4EdqE6CdA2nMESzqPMvv1AzRXdBew==
+  dependencies:
+    classnames "^2.2.6"
+    debounce "^1.2.0"
+    easy-bem "^1.1.1"
+
 react-is@17.0.2:
   version "17.0.2"
   resolved "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz"
@@ -4329,18 +4428,27 @@
   resolved "https://registry.npmjs.org/react-refresh/-/react-refresh-0.8.3.tgz"
   integrity sha512-X8jZHc7nCMjaCqoU+V2I0cOhNW+QMBwSUkeXnTi8IPe6zaRWfn60ZzvFDZqWPfmSJfjub7dDW1SP0jaHWLu/hg==
 
+react-rewards@^2.0.3:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/react-rewards/-/react-rewards-2.0.3.tgz#685aee98654ab4f060e297849f39cf0a16cec042"
+  integrity sha512-qww5Jtk2HmCjR9wc7+0c2iP8oCQzENZn8pnoJGi0S6o+6dAD25+ZoagLSWdoBLGVwxfP5kFBjv3VZ6L8fPk6lg==
+
 react-tiny-popover@^7.0.1:
   version "7.0.1"
   resolved "https://registry.npmjs.org/react-tiny-popover/-/react-tiny-popover-7.0.1.tgz"
   integrity sha512-uV+nTZXkCtfPFQtoKwbfX8waaU7+b8LEOoyOUjtmRxqnH3KLX1FkPm7RU+RC8eXxtOe4rC1cuhOIbQFcc71vQQ==
 
-react@^17.0.2:
-  version "17.0.2"
-  resolved "https://registry.npmjs.org/react/-/react-17.0.2.tgz"
-  integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==
+react-use-draggable-scroll@^0.4.2:
+  version "0.4.2"
+  resolved "https://registry.yarnpkg.com/react-use-draggable-scroll/-/react-use-draggable-scroll-0.4.2.tgz#f91bf8248a37814f2e07ab931463f6faa7a2878f"
+  integrity sha512-PRI49fQ/e3SFDe1LQuOYBIbxEvESryigXbeiPhroaISzGEuznA5QqN4dveunHzlEPEdgr5/RPRxN7d583SU3DA==
+
+react@^18.1.0:
+  version "18.1.0"
+  resolved "https://registry.yarnpkg.com/react/-/react-18.1.0.tgz#6f8620382decb17fdc5cc223a115e2adbf104890"
+  integrity sha512-4oL8ivCz5ZEPyclFQXaNksK3adutVS8l2xzZU0cqEFrE9Sb7fC0EFK5uEk74wIreL1DERyjvsU915j1pcT2uEQ==
   dependencies:
     loose-envify "^1.1.0"
-    object-assign "^4.1.1"
 
 read-pkg-up@^3.0.0:
   version "3.0.0"
@@ -4541,13 +4649,12 @@
   resolved "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz"
   integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
 
-scheduler@^0.20.2:
-  version "0.20.2"
-  resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz"
-  integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==
+scheduler@^0.22.0:
+  version "0.22.0"
+  resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.22.0.tgz#83a5d63594edf074add9a7198b1bae76c3db01b8"
+  integrity sha512-6QAm1BgQI88NPYymgGQLCZgvep4FyePDWFpXVK+zNSUgHwlqpJy8VEh8Et0KxTACS4VWwMousBElAZOH9nkkoQ==
   dependencies:
     loose-envify "^1.1.0"
-    object-assign "^4.1.1"
 
 "semver@2 || 3 || 4 || 5":
   version "5.7.1"
@@ -4615,6 +4722,15 @@
     get-intrinsic "^1.0.2"
     object-inspect "^1.9.0"
 
+sirv@^1.0.7:
+  version "1.0.19"
+  resolved "https://registry.yarnpkg.com/sirv/-/sirv-1.0.19.tgz#1d73979b38c7fe91fcba49c85280daa9c2363b49"
+  integrity sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==
+  dependencies:
+    "@polka/url" "^1.0.0-next.20"
+    mrmime "^1.0.0"
+    totalist "^1.0.0"
+
 slash@^3.0.0:
   version "3.0.0"
   resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz"
@@ -4976,6 +5092,11 @@
   resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz"
   integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==
 
+totalist@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/totalist/-/totalist-1.1.0.tgz#a4d65a3e546517701e3e5c37a47a70ac97fe56df"
+  integrity sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==
+
 tr46@^1.0.1:
   version "1.0.1"
   resolved "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz"
@@ -5102,6 +5223,11 @@
     punycode "1.3.2"
     querystring "0.2.0"
 
+use-draggable-scroll@^0.1.0:
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/use-draggable-scroll/-/use-draggable-scroll-0.1.0.tgz#ca7967eeec9d6a53f965b84f9c295c214aa43ed7"
+  integrity sha512-mX6nT3cUqOTtA+8QUH9HfdKtzI6Oquj9QIB0wALWZYmWogNQ746MaUcmqKOKCIlt2UH6egxhSKNPiSlfEqmKhA==
+
 use-subscription@1.5.1:
   version "1.5.1"
   resolved "https://registry.npmjs.org/use-subscription/-/use-subscription-1.5.1.tgz"
@@ -5186,6 +5312,21 @@
   resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz"
   integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==
 
+webpack-bundle-analyzer@4.3.0:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.3.0.tgz#2f3c0ca9041d5ee47fa418693cf56b4a518b578b"
+  integrity sha512-J3TPm54bPARx6QG8z4cKBszahnUglcv70+N+8gUqv2I5KOFHJbzBiLx+pAp606so0X004fxM7hqRu10MLjJifA==
+  dependencies:
+    acorn "^8.0.4"
+    acorn-walk "^8.0.0"
+    chalk "^4.1.0"
+    commander "^6.2.0"
+    gzip-size "^6.0.0"
+    lodash "^4.17.20"
+    opener "^1.5.2"
+    sirv "^1.0.7"
+    ws "^7.3.1"
+
 whatwg-url@^7.0.0:
   version "7.1.0"
   resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz"
@@ -5243,6 +5384,11 @@
   resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz"
   integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
 
+ws@^7.3.1:
+  version "7.5.7"
+  resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.7.tgz#9e0ac77ee50af70d58326ecff7e85eb3fa375e67"
+  integrity sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==
+
 xtend@^4.0.0, xtend@^4.0.2:
   version "4.0.2"
   resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz"