aboutsummaryrefslogtreecommitdiff
path: root/apps/website/src
diff options
context:
space:
mode:
Diffstat (limited to 'apps/website/src')
-rw-r--r--apps/website/src/components/base/Button.astro64
-rw-r--r--apps/website/src/components/base/Card.astro22
-rw-r--r--apps/website/src/components/base/CodeBlock.astro21
-rw-r--r--apps/website/src/components/base/Footer.astro42
-rw-r--r--apps/website/src/components/base/FormattedDate.astro17
-rw-r--r--apps/website/src/components/base/Header.astro62
-rw-r--r--apps/website/src/components/base/Link.astro17
-rw-r--r--apps/website/src/components/base/Navbar.astro21
-rw-r--r--apps/website/src/components/base/NavbarElement.astro89
-rw-r--r--apps/website/src/components/base/Paragraph.astro28
-rw-r--r--apps/website/src/components/base/ScreenOverlay.astro16
-rw-r--r--apps/website/src/components/base/ScrollbarOverlayContainer.astro16
-rw-r--r--apps/website/src/components/base/Section.astro51
-rw-r--r--apps/website/src/components/base/Slider.astro73
-rw-r--r--apps/website/src/components/base/Tag.astro13
-rw-r--r--apps/website/src/components/base/navbar/Navbar.astro23
-rw-r--r--apps/website/src/components/base/navbar/NavbarElement.astro100
-rw-r--r--apps/website/src/components/icons/Icon.astro68
-rw-r--r--apps/website/src/components/icons/impl/chat.svg3
-rw-r--r--apps/website/src/components/icons/impl/chatting.svg5
-rw-r--r--apps/website/src/components/icons/impl/code.svg3
-rw-r--r--apps/website/src/components/icons/impl/crashpatch.svg5
-rw-r--r--apps/website/src/components/icons/impl/discord.svg1
-rw-r--r--apps/website/src/components/icons/impl/evergreenhud.svg10
-rw-r--r--apps/website/src/components/icons/impl/github.svg3
-rw-r--r--apps/website/src/components/icons/impl/keystrokes.svg7
-rw-r--r--apps/website/src/components/icons/impl/link-external.svg3
-rw-r--r--apps/website/src/components/icons/impl/oneconfig.svg5
-rw-r--r--apps/website/src/components/icons/impl/overflowanimations.svg8
-rw-r--r--apps/website/src/components/icons/impl/polysprint.svg13
-rw-r--r--apps/website/src/components/icons/impl/polytime.svg11
-rw-r--r--apps/website/src/components/icons/impl/polyweather.svg12
-rw-r--r--apps/website/src/components/icons/impl/user.svg3
-rw-r--r--apps/website/src/components/icons/impl/vanillahud.svg5
-rw-r--r--apps/website/src/components/icons/impl/youtube.svg3
-rw-r--r--apps/website/src/components/logos/Logo.astro85
-rw-r--r--apps/website/src/components/page/branding/BrandingImage.astro33
-rw-r--r--apps/website/src/components/shared/BaseHead.astro15
-rw-r--r--apps/website/src/components/shared/SEO.astro89
-rw-r--r--apps/website/src/content/blog/first.md16
-rw-r--r--apps/website/src/content/config.ts13
-rw-r--r--apps/website/src/env.d.ts1
-rw-r--r--apps/website/src/layouts/BlogPost.astro35
-rw-r--r--apps/website/src/layouts/Layout.astro48
-rw-r--r--apps/website/src/pages/about.astro98
-rw-r--r--apps/website/src/pages/blog/[...slug].astro23
-rw-r--r--apps/website/src/pages/blog/index.astro30
-rw-r--r--apps/website/src/pages/branding.astro117
-rw-r--r--apps/website/src/pages/contact.astro53
-rw-r--r--apps/website/src/pages/index.astro321
-rw-r--r--apps/website/src/pages/legal/ip.astro22
-rw-r--r--apps/website/src/pages/legal/privacy.astro22
-rw-r--r--apps/website/src/pages/legal/security.astro22
-rw-r--r--apps/website/src/pages/legal/terms.astro22
-rw-r--r--apps/website/src/pages/mods.astro169
-rw-r--r--apps/website/src/pages/oss.astro147
-rw-r--r--apps/website/src/pages/projects/oneconfig/download.astro61
-rw-r--r--apps/website/src/pages/projects/oneconfig/index.astro171
-rw-r--r--apps/website/src/pages/rss.xml.js16
-rw-r--r--apps/website/src/styles/blog.css37
-rw-r--r--apps/website/src/styles/global.css67
-rw-r--r--apps/website/src/types/Config.d.ts75
-rw-r--r--apps/website/src/types/smartypants.d.ts4
63 files changed, 2126 insertions, 529 deletions
diff --git a/apps/website/src/components/base/Button.astro b/apps/website/src/components/base/Button.astro
index adbc656..e529dc5 100644
--- a/apps/website/src/components/base/Button.astro
+++ b/apps/website/src/components/base/Button.astro
@@ -1,26 +1,28 @@
---
-import type { Icons } from "@components/icons/Icon.astro";
-import Icon from "@components/icons/Icon.astro";
-import type { HTMLAttributes } from "astro/types";
+import type { Icons } from '@components/icons/Icon.astro';
+import Icon from '@components/icons/Icon.astro';
+import type { HTMLAttributes } from 'astro/types';
const styles = {
- primary: "bg-blue-500 text-white hover:bg-blue-400 active:bg-blue-600 disabled:bg-blue-800 disabled:text-white-1/4",
- secondary: "bg-blue-100 text-blue-500 hover:bg-blue-200 active:bg-blue-300 disabled:bg-blue-50 disabled:text-blue-200",
-}
+ // TODO: adjust active / disabled colors
+ primary: 'bg-blue-500 text-white hover:bg-blue-400 active:bg-blue-600 disabled:bg-blue-800 disabled:text-white-1/4',
+ secondary: 'bg-blue-20 text-blue-60 border-[1px] border-blue-30 hover:bg-blue-200 active:bg-blue-300 disabled:bg-blue-50 disabled:text-blue-200',
+ ghost: 'bg-transparent text-blue-500 hover:bg-blue-20 active:bg-blue-30 disabled:bg-transparent disabled:text-blue-200',
+};
const sizes = {
- sm: "px-4 py-2 text-sm",
- md: "px-5 py-3 text-md",
- lg: "px-6 py-3 text-lg rounded-2xl"
-}
+ sm: 'px-4 py-2 text-sm',
+ md: 'px-5 py-3 text-md',
+ lg: 'px-6 py-3 text-lg rounded-2xl',
+};
const iconSize = {
- sm: 15,
- md: 18,
- lg: 24
-}
+ sm: 17,
+ md: 20,
+ lg: 24,
+};
-interface Props extends HTMLAttributes<"button"> {
+interface Props extends HTMLAttributes<'button'> {
style?: keyof typeof styles
size?: keyof typeof sizes
text?: string
@@ -30,28 +32,28 @@ interface Props extends HTMLAttributes<"button"> {
}
const {
- style = "primary",
- size = "md",
- text = "",
- iconLeft = "",
- iconRight = "",
+ style = 'primary',
+ size = 'md',
+ text = '',
+ iconLeft = '',
+ iconRight = '',
...rest
} = Astro.props;
const className = [
- "flex flex-row justify-center items-center text-center focus-visible:ring-offset-4 focus-visible:outline-offset-4",
- "rounded-xl font-medium",
+ 'flex flex-row justify-center items-center text-center focus-visible:ring-offset-4 focus-visible:outline-offset-4',
+ 'rounded-xl font-medium',
styles[style],
sizes[size],
- "transition-colors",
- rest.class
-].join(" ");
+ 'transition-colors',
+ rest.class,
+].join(' ');
-const Element = rest.href ? "a" : "button" as any;
+const Element = rest.href ? 'a' : 'button' as any;
---
-<Element {...rest} class={className}>
- {iconLeft && <span class="mr-2"><Icon icon={iconLeft} size={iconSize[size]}></Icon></span>}
- {text ? text : <slot />}
- {iconRight && <span class="ml-2"><Icon icon={iconRight} size={iconSize[size]}></Icon></span>}
-</Element>
+ <Element {...rest} class={className}>
+ {iconLeft && <span class="mr-2"><Icon icon={iconLeft} size={iconSize[size]}></Icon></span>}
+ {text || <slot/>}
+ {iconRight && <span class="ml-2"><Icon icon={iconRight} size={iconSize[size]}></Icon></span>}
+ </Element>
diff --git a/apps/website/src/components/base/Card.astro b/apps/website/src/components/base/Card.astro
new file mode 100644
index 0000000..6438273
--- /dev/null
+++ b/apps/website/src/components/base/Card.astro
@@ -0,0 +1,22 @@
+---
+import type { Icons } from '@components/icons/Icon.astro';
+import Icon from '@components/icons/Icon.astro';
+import type { HTMLAttributes } from 'astro/types';
+
+interface Props extends HTMLAttributes<'div'> {
+ icon: Icons
+ text?: string
+}
+
+const {
+ icon,
+ text = 'Hiiii',
+ ...rest
+} = Astro.props;
+---
+
+<!-- pt-1 added temporarily cause for some reason the icon's padding doesn't apply unless I add this. the wonders of CSS. -->
+<div {...rest} class="rounded-xl bg-primary-100 w-[256px] shrink-0">
+ <Icon icon={icon} size={48} class="my-[28px] mx-auto text-white"></Icon>
+ <p class="text-white mx-auto bg-primary-200 rounded-b-xl text-[14px] py-[7px] pl-[12px] pr-[32px]">{text}</p>
+</div>
diff --git a/apps/website/src/components/base/CodeBlock.astro b/apps/website/src/components/base/CodeBlock.astro
deleted file mode 100644
index 5991428..0000000
--- a/apps/website/src/components/base/CodeBlock.astro
+++ /dev/null
@@ -1,21 +0,0 @@
----
-
----
-
-<pre class="flex flex-col">
- <code class="whitespace-pre bg-white-light border border-gray-50 rounded-2xl text-sm">{`public class MyConfig {
-
- @Switch(name = "Sub Switch", type = OptionType.SWITCH)
- public static boolean subSwitch = false;
-
- public MyConfig() {
- super(new Mod("My Mod", ModType.UTIL_QOL), "config.json");
-
- addDependency("subSwitch", () -> {
- // TODO: Make codeblocks better lmao
- });
- }
-
-}`}</code>
-</pre>
-
diff --git a/apps/website/src/components/base/Footer.astro b/apps/website/src/components/base/Footer.astro
index b24db5f..7a9071a 100644
--- a/apps/website/src/components/base/Footer.astro
+++ b/apps/website/src/components/base/Footer.astro
@@ -1,7 +1,47 @@
---
+import Icon from '@components/icons/Icon.astro';
+import Logo from '@components/logos/Logo.astro';
+import configConst from '@config';
+import type { HTMLAttributes } from 'astro/types';
+import Link from './Link.astro';
+interface Props extends HTMLAttributes<'footer'> {}
+
+const props = Astro.props;
---
-<footer class="flex min-h-[400px] bg-blue-100 mt-4">
+<footer {...props} class="section flex justify-center items-center bg-blue-100 -mt-40 pt-20 pb-8 px-20">
+ <div class="max-w-[1024px] w-full flex flex-col gap-y-24">
+ <div class="flex flex-col gap-y-20 justify-center items-start md:flex-row md:items-start md:justify-between">
+ <div class="flex-1 flex flex-col gap-y-3 text-blue-gray">
+ <Logo logo="polyfrost.full" />
+ <p>English, USA</p> {/* hardcoded for now, todo i18n */}
+ <div class="flex flex-row gap-3">
+ <a href={configConst.socials.discord} target="_blank" class="hover:text-[#5865F2]"><Icon icon="discord" /></a>
+ <a href={configConst.socials.youtube} target="_blank" class="hover:text-[#ff0000]"><Icon icon="youtube" /></a>
+ <a href={configConst.socials.github} target="_blank" class="hover:text-[#000000]"><Icon icon="github" /></a>
+ </div>
+ </div>
+
+ <div class="flex-1 flex flex-col md:flex-row justify-end gap-8">
+ {configConst.footer.map(column => (
+ <div class="flex flex-col gap-y-3">
+ <h3 class="text-gray-700 text-md">{column.header}</h3>
+ <ul class="flex flex-col gap-y-1">
+ {column.links.map(link => (
+ <li>
+ <Link href={link.url} class="text-blue-gray text-sm text-nowrap">{link.text}</Link>
+ </li>
+ ))}
+ </ul>
+ </div>
+ ))}
+ </div>
+ </div>
+ <div class="flex flex-col items-center md:flex-row md:items-start md:justify-between">
+ <p class="text-blue-gray text-sm">© {new Date().getFullYear()} Polyfrost. All rights reserved.</p>
+ <p class="text-blue-gray text-sm">Not an official Minecraft product. Not approved by or affiliated with Mojang Studios.</p>
+ </div>
+ </div>
</footer>
diff --git a/apps/website/src/components/base/FormattedDate.astro b/apps/website/src/components/base/FormattedDate.astro
new file mode 100644
index 0000000..af538b9
--- /dev/null
+++ b/apps/website/src/components/base/FormattedDate.astro
@@ -0,0 +1,17 @@
+---
+interface Props {
+ date: Date
+}
+
+const { date } = Astro.props;
+---
+
+ <time datetime={date.toISOString()}>
+ {
+ date.toLocaleDateString('en-us', {
+ year: 'numeric',
+ month: 'short',
+ day: 'numeric',
+ })
+ }
+ </time>
diff --git a/apps/website/src/components/base/Header.astro b/apps/website/src/components/base/Header.astro
index d35ad9f..962b2d4 100644
--- a/apps/website/src/components/base/Header.astro
+++ b/apps/website/src/components/base/Header.astro
@@ -1,41 +1,54 @@
---
-import type { HTMLAttributes } from "astro/types"
+import type { HTMLAttributes } from 'astro/types';
const sizes = {
- "xxl": "h1",
- "xl": "h2",
- "lg": "h2",
- "md": "h3",
- "sm": "h4",
- "xs": "h5",
- "xxs": "h6"
+ xxl: 'h1',
+ xl: 'h2',
+ lg: 'h2',
+ md: 'h3',
+ sm: 'h4',
+ xs: 'h5',
+ xxs: 'h6',
};
-type Headers = "h1" | "h2" | "h3" | "h4" | "h5" | "h6";
+type Headers = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';
interface Props extends HTMLAttributes<Headers> {
- size?: keyof typeof sizes;
- align?: "left" | "center" | "right" | "inherit";
+ size?: keyof typeof sizes
+ align?: 'left' | 'center' | 'right' | 'inherit'
+ inheritSize?: boolean
}
const {
- size = "lg",
- align = "inherit",
+ size = 'lg',
+ align = 'inherit',
+ inheritSize = false,
...attr
} = Astro.props;
const Element = sizes[size] as any; // Unfortunately gotta do this
-const className = (align == "inherit" ? "" : `text-${align} `)
- + (size == "xxl" ? " page-header" : "")
- + (attr.class ? ` ${attr.class}` : "");
+let className: string | string[] = [];
+if (!inheritSize)
+ className.push('header');
+
+if (align !== 'inherit')
+ className.push(`text-${align}`);
+
+if (size === 'xxl' || size === 'xl')
+ className.push('page-header');
+
+if (attr.class)
+ className.push(attr.class);
+
+className = className.join(' ');
---
<Element {...attr} class={className}>
- <slot />
+ <slot/>
</Element>
<style>
- h1 {
+ h1.header {
font-size: theme("fontSize.header-lg");
&.page-header {
font-size: theme("fontSize.header-page");
@@ -43,27 +56,30 @@ const className = (align == "inherit" ? "" : `text-${align} `)
font-weight: 600;
}
- h2 {
+ h2.header {
font-size: theme("fontSize.header");
+ &.page-header {
+ font-size: theme("fontSize.header-page");
+ }
font-weight: 600;
}
- h3 {
+ h3.header {
font-size: theme("fontSize.header-sm");
font-weight: 600;
}
- h4 {
+ h4.header {
font-size: theme("fontSize.body-lg");
font-weight: 500;
}
- h5 {
+ h5.header {
font-size: theme("fontSize.body");
font-weight: 500;
}
- h6 {
+ h6.header {
font-size: theme("fontSize.body-sm");
font-weight: 500;
}
diff --git a/apps/website/src/components/base/Link.astro b/apps/website/src/components/base/Link.astro
new file mode 100644
index 0000000..dfb6425
--- /dev/null
+++ b/apps/website/src/components/base/Link.astro
@@ -0,0 +1,17 @@
+---
+import type { HTMLAttributes } from 'astro/types';
+
+interface Props extends HTMLAttributes<'a'> {
+
+}
+
+const props = Astro.props;
+const className = [
+ 'text-current hover:text-blue-500 underline decoration-[transparent] hover:decoration-blue-500 transition-colors',
+ props.class,
+].join(' ');
+---
+
+<a class={className} {...props}>
+ <slot />
+</a>
diff --git a/apps/website/src/components/base/Navbar.astro b/apps/website/src/components/base/Navbar.astro
deleted file mode 100644
index a3a82fe..0000000
--- a/apps/website/src/components/base/Navbar.astro
+++ /dev/null
@@ -1,21 +0,0 @@
----
-import config from "config";
-import type { Config } from "@webtypes/Config";
-import NavbarElement from "./NavbarElement.astro";
-
----
-
-<div class="absolute w-full flex flex-row justify-center h-screen max-h-[110px] px-3">
- <nav class="w-full max-w-[1080px] flex flex-col md:flex-row justify-between items-center">
- <ul class="flex flex-row justify-start gap-4">
- {(config as Config).navbar.left.map((element, index) => (
- <NavbarElement {element} {index} />
- ))}
- </ul>
- <ul class="flex flex-row justify-end gap-4">
- {(config as Config).navbar.right.map((element, index) => (
- <NavbarElement {element} {index} />
- ))}
- </ul>
- </nav>
-</div>
diff --git a/apps/website/src/components/base/NavbarElement.astro b/apps/website/src/components/base/NavbarElement.astro
deleted file mode 100644
index b0f1282..0000000
--- a/apps/website/src/components/base/NavbarElement.astro
+++ /dev/null
@@ -1,89 +0,0 @@
----
-import ChevronDown from "@components/icons/ChevronDown.svg";
-import type { LogoType, NavbarElement } from "@webtypes/Config";
-import ScreenOverlay from "./ScreenOverlay.astro";
-import Header from "./Header.astro";
-import Tag from "./Tag.astro";
-import Logo from "@components/logos/Logo.astro";
-import ScrollbarOverlayContainer from "./ScrollbarOverlayContainer.astro";
-import Icon from "@components/icons/Icon.astro";
-
-interface Props {
- element: NavbarElement;
- index: number;
-}
-
-const {
- element,
- index
-} = Astro.props;
----
-
-<li class="sm:relative max-sm:overflow-hidden flex flex-row justify-center items-center text-center">
- <label for={`navbar-input-${index}`} class="group">
-
- {element.path ? (
- <a href={element.path} class="p-2 flex flex-row justify-center items-center text-gray-700 hover:text-blue-500">
- {element.text && element.text}
- {element.logo && <Logo size={element.logo[1] < 0 ? undefined : element.logo[1]} logo={element.logo[0] as LogoType} />}
- {element.dropdown && <Icon icon="chevron-down" />}
- </a>
- ) : (
- <p class="p-2 flex flex-row justify-center items-center text-gray-700 hover:text-blue-500 cursor-default">
- {element.text && element.text}
- {element.logo && <Logo size={element.logo[1] < 0 ? undefined : element.logo[1]} logo={element.logo[0] as LogoType} />}
- {element.dropdown && <Icon icon="chevron-down" />}
- </p>
- )}
-
- {element.dropdown && (
- <ScreenOverlay class="max-sm:group-focus-within:opacity-100" />
- <input tabindex="-1" type="checkbox" id={`navbar-input-${index}`} class="peer appearance-none absolute">
- <div class={`
- transition-opacity
- fixed md:absolute right-0 max-sm:bottom-0
- max-sm:overflow-hidden
- max-sm:max-h-[70vh] max-sm:h-screen max-sm:w-screen
- pointer-events-none opacity-0
-
- md:top-full md:right-0
-
- group-focus-within:pointer-events-auto group-focus-within:opacity-100
- focus-within:pointer-events-auto focus-within:opacity-100
- hover:pointer-events-auto hover:opacity-100
- `}>
- <ScrollbarOverlayContainer tabindex="-1" class={`
- bg-gray-50
- rounded-t-lg md:rounded-lg
- transition-transform
- max-sm:translate-y-1/3 max-sm:left-0
- group-focus-within:translate-y-0
- max-h-full md:max-h-96 overflow-y-auto
- md:shadow-lg
- `}>
- <ul class="p-4">
- {element.dropdown.map((item) => (
- <li>
- <a href={item.path} class="flex sm:min-w-[400px] sm:max-w-[400px]">
- <div class="transition-colors text-left w-full flex flex-row justify-start rounded-md items-center px-6 py-4 gap-6 hover:bg-blue-50">
- <div class="w-[36px]">
- {item.logo && <Logo size={40} logo={item.logo} />}
- </div>
-
- <div class="flex flex-col justify-start items-start">
- <div class="flex flex-row gap-2">
- <Header size="sm" class="text-gray-800">{item.name}</Header>
- {item.tag && <Tag>{item.tag}</Tag>}
- </div>
- <p class="text-sm text-gray-400 font-light">{item.description}</p>
- </div>
- </div>
- </a>
- </li>
- ))}
- </ul>
- </ScrollbarOverlayContainer>
- </div>
- )}
- </label>
-</li>
diff --git a/apps/website/src/components/base/Paragraph.astro b/apps/website/src/components/base/Paragraph.astro
index 08fbbdd..db0bff6 100644
--- a/apps/website/src/components/base/Paragraph.astro
+++ b/apps/website/src/components/base/Paragraph.astro
@@ -1,31 +1,31 @@
---
-import type { HTMLAttributes } from "astro/types";
+import type { HTMLAttributes } from 'astro/types';
const sizes = {
- xs: "text-xs",
- sm: "text-sm",
- md: "text-md",
- lg: "text-lg",
- xl: "text-xl"
-}
+ xs: 'text-xs',
+ sm: 'text-sm',
+ md: 'text-inherit',
+ lg: 'text-lg',
+ xl: 'text-xl',
+};
-interface Props extends HTMLAttributes<"p"> {
- text?: string,
+interface Props extends HTMLAttributes<'p'> {
+ text?: string
size?: keyof typeof sizes
}
const {
- text = "",
- size = "md",
+ text = '',
+ size = 'md',
...props
} = Astro.props;
const className = [
sizes[size],
- props.class
-].join(" ");
+ props.class,
+].join(' ');
---
<p class={className} {...props}>
- {text ? text : <slot />}
+ {text || <slot/>}
</p>
diff --git a/apps/website/src/components/base/ScreenOverlay.astro b/apps/website/src/components/base/ScreenOverlay.astro
index 7be8bc5..1b97152 100644
--- a/apps/website/src/components/base/ScreenOverlay.astro
+++ b/apps/website/src/components/base/ScreenOverlay.astro
@@ -1,16 +1,16 @@
---
-import type { HTMLAttributes } from "astro/types";
+import type { HTMLAttributes } from 'astro/types';
-interface Props extends HTMLAttributes<"div"> {
- zIndex?: number;
+interface Props extends HTMLAttributes<'div'> {
+ zIndex?: number
}
const {
- zIndex = 0,
- ...rest
+ zIndex = 0,
+ ...rest
} = Astro.props;
---
-<div class="pointer-events-none absolute left-0 top-0">
- <div class={`transition-opacity fixed opacity-0 w-screen h-screen z-[${zIndex}] bg-black/30 ${rest.class}`} {...rest}></div>
-</div> \ No newline at end of file
+ <div class="pointer-events-none absolute left-0 top-0">
+ <div class={`transition-opacity fixed opacity-0 w-screen h-screen z-[${zIndex}] bg-black/30 ${rest.class}`} {...rest}></div>
+ </div>
diff --git a/apps/website/src/components/base/ScrollbarOverlayContainer.astro b/apps/website/src/components/base/ScrollbarOverlayContainer.astro
index d8d315d..235dbc7 100644
--- a/apps/website/src/components/base/ScrollbarOverlayContainer.astro
+++ b/apps/website/src/components/base/ScrollbarOverlayContainer.astro
@@ -1,21 +1,21 @@
---
-import type { HTMLAttributes } from "astro/types";
+import type { HTMLAttributes } from 'astro/types';
-interface Props extends HTMLAttributes<"div"> {
+interface Props extends HTMLAttributes<'div'> {
}
const { ...attr } = Astro.props;
---
-<div {...attr}>
- <slot></slot>
-</div>
+ <div {...attr}>
+ <slot></slot>
+ </div>
-<style>
+ <style>
@media (hover: hover) {
div {
-
+
}
div::-webkit-scrollbar {
@@ -48,4 +48,4 @@ const { ...attr } = Astro.props;
background-color: #00000040;
}
}
-</style> \ No newline at end of file
+ </style>
diff --git a/apps/website/src/components/base/Section.astro b/apps/website/src/components/base/Section.astro
index 0d177ef..6ea3075 100644
--- a/apps/website/src/components/base/Section.astro
+++ b/apps/website/src/components/base/Section.astro
@@ -1,38 +1,45 @@
---
-import type { HTMLAttributes } from "astro/types";
+import type { HTMLAttributes } from 'astro/types';
-interface Props extends HTMLAttributes<"section"> {
- maxWidth?: "none" | String;
- colReverse?: boolean;
- wrapperClass?: string;
+interface Props extends HTMLAttributes<'section'> {
+ maxWidth?: 'none' | String
+ colReverse?: boolean
+ wrapperClass?: string
+ wFull?: boolean
+ hFull?: boolean
}
const {
- maxWidth = "1080px",
+ maxWidth = '1024px',
colReverse = true,
- wrapperClass = "",
+ wrapperClass = '',
+ wFull = true,
+ hFull = false,
...props
} = Astro.props;
-const twoColumn = Astro.slots.has("left") || Astro.slots.has("right");
+const twoColumn = Astro.slots.has('left') || Astro.slots.has('right');
-const className = `max-w-[${maxWidth}] w-full px-5 md:p-0 flex gap-4`
- + (twoColumn ? ` ${maxWidth == "none" ? "justify-center" : "justify-between md:justify-evenly lg:justify-between"} ${colReverse ? "flex-col-reverse" : "flex-col"} md:flex-row md:items-center md:flex-row` : "")
- + (props.class ? ` ${props.class}` : "");
+const twoColumnClasses = ` ${maxWidth === 'none' ? 'justify-center' : 'justify-center lg:justify-between'}
+ ${colReverse ? 'flex-col-reverse' : 'flex-col'} lg:flex-row items-center`;
+
+const className = `max-w-[${maxWidth}] ${hFull ? 'min-h-screen' : 'h-auto'} ${wFull ? 'w-full' : `w-[${maxWidth}]`} px-5 xl:px-0 flex gap-x-20 gap-y-4${twoColumn ? twoColumnClasses : ''}${props.class ? ` ${props.class}` : ''}`;
---
-<section class={`w-full flex justify-center${wrapperClass ? ` ${wrapperClass}` : ""}`}>
+<section class={`w-full outline-none flex justify-center ${wrapperClass ?? ''}`}>
<div class={className} {...props}>
- {twoColumn ? (
- <div class="flex flex-col items-start text-left relative">
- <slot name="left"></slot>
- </div>
+ {twoColumn
+ ? (
+ <div class="flex flex-col items-center text-center w-full md:w-auto md:items-start md:text-left relative">
+ <slot name="left"></slot>
+ </div>
- <div class="flex flex-col items-start text-left relative">
- <slot name="right"></slot>
- </div>
- ) : (
- <slot></slot>
- )}
+ <div class="flex flex-col items-center text-center w-full md:w-auto md:items-start md:text-left relative">
+ <slot name="right"></slot>
+ </div>
+ )
+ : (
+ <slot></slot>
+ )}
</div>
</section>
diff --git a/apps/website/src/components/base/Slider.astro b/apps/website/src/components/base/Slider.astro
new file mode 100644
index 0000000..1afd680
--- /dev/null
+++ b/apps/website/src/components/base/Slider.astro
@@ -0,0 +1,73 @@
+---
+import type { HTMLAttributes } from 'astro/types';
+
+interface Props extends HTMLAttributes<'div'> {
+ dir?: string
+ wrapperClass?: string
+ childrenNum: number
+ childrenSize?: string
+ speed?: string
+}
+
+const {
+ dir = 'left',
+ wrapperClass = '',
+ childrenNum,
+ childrenSize = '256px',
+ speed = '25s',
+} = Astro.props;
+
+---
+
+<div class={
+ `w-full slider
+ ${dir === 'right' ? 'reverse' : ''}
+ ${wrapperClass}`
+}>
+ <div class="wrapper flex flex-row gap-2.5">
+ <slot class="content" />
+ <slot class="content" />
+ </div>
+</div>
+
+<!--
+ credit to modrinth's implementation! here is their CSS code:
+ https://github.com/modrinth/knossos/blob/d6ba3f3adfd8f52b85f83e53660d3d87cd0bc9ea/pages/index.vue#L620-L675
+ oh and since theirs is in AGPL, please note that this codeblock is also AGPL
+-->
+<style lang="scss" define:vars={{ childrenNum, childrenSize, speed }}>
+ .slider {
+ .wrapper {
+ animation: var(--speed) linear infinite slide;
+ @media (prefers-reduced-motion) {
+ animation: none;
+ }
+ @keyframes slide {
+ from {
+ transform: translateX(0);
+ }
+ to {
+ transform: translateX(calc((var(--childrenSize) + 10px) * -1 * var(--childrenNum)));
+ }
+ }
+ }
+
+ /**
+ &:hover > .wrapper, &.reverse:hover > .wrapper {
+ animation-play-state: paused;
+ }
+ */
+
+ &.reverse > .wrapper {
+ animation: var(--speed) linear infinite slide-reverse;
+ @keyframes slide-reverse {
+ from {
+ transform: translateX(calc((var(--childrenSize) + 10px) * -1 * var(--childrenNum)));
+ }
+ to {
+ transform: translateX(0);
+ }
+ }
+ }
+ }
+</style>
diff --git a/apps/website/src/components/base/Tag.astro b/apps/website/src/components/base/Tag.astro
index e6fd34f..2eb5778 100644
--- a/apps/website/src/components/base/Tag.astro
+++ b/apps/website/src/components/base/Tag.astro
@@ -1,14 +1,13 @@
---
-import type { HTMLAttributes } from "astro/types";
+import type { HTMLAttributes } from 'astro/types';
-interface Props extends HTMLAttributes<"span"> {}
+interface Props extends HTMLAttributes<'span'> {}
const { ...attr } = Astro.props;
---
-<div class="transition-colors text-blue-500 hover:bg-blue-500/20 text-xs font-medium bg-blue-500/10 rounded-md flex flex-col justify-center items-center px-2 py-0.5">
- <span {...attr}>
- <slot></slot>
- </span>
+<div class="leading-none transition-colors text-blue-500 hover:bg-blue-500/20 text-xs font-medium bg-blue-500/10 rounded-md flex flex-col justify-center items-center px-2 py-0.5">
+ <span {...attr}>
+ <slot></slot>
+ </span>
</div>
-
diff --git a/apps/website/src/components/base/navbar/Navbar.astro b/apps/website/src/components/base/navbar/Navbar.astro
new file mode 100644
index 0000000..8903b7e
--- /dev/null
+++ b/apps/website/src/components/base/navbar/Navbar.astro
@@ -0,0 +1,23 @@
+---
+import type { Config } from '@webtypes/Config';
+import type { HTMLAttributes } from 'astro/types';
+import config from 'config';
+import NavbarElement from '../navbar/NavbarElement.astro';
+
+interface Props extends HTMLAttributes<'div'> {}
+const props = Astro.props;
+---
+<div {...props} class="absolute w-full flex flex-row justify-center h-screen max-h-[110px] px-3 z-navbar text-[16px]">
+ <nav class="w-full max-w-[1024px] flex flex-col md:flex-row justify-between items-center">
+ <ul class="flex flex-row justify-start gap-4 max-md:mt-4">
+ {(config as Config).navbar.left.map((element, index) => (
+ <NavbarElement {element} {index}/>
+ ))}
+ </ul>
+ <ul class="flex flex-row justify-center md:justify-end gap-4 flex-wrap">
+ {(config as Config).navbar.right.map((element, index) => (
+ <NavbarElement {element} {index}/>
+ ))}
+ </ul>
+ </nav>
+</div>
diff --git a/apps/website/src/components/base/navbar/NavbarElement.astro b/apps/website/src/components/base/navbar/NavbarElement.astro
new file mode 100644
index 0000000..5e37253
--- /dev/null
+++ b/apps/website/src/components/base/navbar/NavbarElement.astro
@@ -0,0 +1,100 @@
+---
+import Icon from '@components/icons/Icon.astro';
+import Logo from '@components/logos/Logo.astro';
+import type { LogoType, NavbarElement } from '@webtypes/Config';
+import Header from '../Header.astro';
+import ScreenOverlay from '../ScreenOverlay.astro';
+import ScrollbarOverlayContainer from '../ScrollbarOverlayContainer.astro';
+import Tag from '../Tag.astro';
+
+interface Props {
+ element: NavbarElement
+ index: number
+}
+
+const {
+ element,
+ index,
+} = Astro.props;
+
+function isCurrentPage(url: string): boolean {
+ return Astro.url.pathname === url;
+}
+
+---
+
+ <li class="sm:relative max-sm:overflow-hidden flex flex-row justify-center items-center text-center">
+ {element.path
+? (
+ <a href={element.path} class={`p-2 flex flex-row justify-center items-center hover:text-blue-500 ${isCurrentPage(element.path) ? 'text-blue-400' : 'text-gray-700'}`}>
+ {element.text && element.text}
+ {element.logo && <Logo class="active:scale-95 transition-transform" size={element.logo[1] < 0 ? undefined : element.logo[1]} logo={element.logo[0] as LogoType}/>}
+ {element.dropdown && <Icon icon="chevron-down"/>}
+ </a>
+ )
+: (
+ <label for={`navbar-input-${index}`} class="group">
+ {element.dropdown && (
+ <p class={`p-2 flex flex-row justify-center items-center hover:text-blue-500 cursor-default ${isCurrentPage(element.dropdown[0].path ?? '') ? 'text-blue-400' : 'text-gray-700'}`}>
+ {element.text && element.text}
+ {element.logo && <Logo size={element.logo[1] < 0 ? undefined : element.logo[1]} logo={element.logo[0] as LogoType}/>}
+ {element.dropdown && <Icon icon="chevron-down"/>}
+ </p>
+
+ <ScreenOverlay class="max-sm:group-focus-within:opacity-100 z-navbar-backdrop"/>
+ <input tabindex="-1" type="checkbox" id={`navbar-input-${index}`} class="peer appearance-none absolute"/>
+ <div class={`
+ transition-opacity
+ fixed md:absolute right-0 max-sm:bottom-0
+ max-sm:overflow-hidden
+ max-sm:max-h-[70vh] max-sm:h-screen max-sm:w-screen
+ pointer-events-none opacity-0
+ z-navbar
+
+ md:top-full md:right-0
+
+ group-focus-within:pointer-events-auto group-focus-within:opacity-100
+ md:group-hover:pointer-events-auto md:group-hover:opacity-100
+ focus-within:pointer-events-auto focus-within:opacity-100
+ md:hover:pointer-events-auto md:hover:opacity-100
+ `}>
+ <ScrollbarOverlayContainer
+ tabindex="-1"
+ class={`
+ bg-gray-50
+ border border-gray-100
+ rounded-t-lg md:rounded-lg
+ transition-transform
+ max-sm:translate-y-1/3 max-sm:left-0
+ group-focus-within:translate-y-0
+ max-h-full md:max-h-96 overflow-y-auto min-h-full
+ md:shadow-lg
+ `}>
+ <ul class="p-4">
+ {element.dropdown.map(item => (
+ <li>
+ <a href={item.path} class="flex sm:min-w-[400px] sm:max-w-[400px]">
+ <div class={`transition-[color,background-color,filter] text-left w-full flex flex-row justify-start rounded-md items-center px-6 py-4 gap-6 ${item.path ? 'hover:bg-blue-50 active:bg-blue-100' : 'hover:grayscale hover:brightness-75'}`}>
+ <div class="w-[36px]">
+ {item.logo && <Logo size={40} logo={item.logo}/>}
+ </div>
+
+ <div class="flex flex-col justify-start items-start">
+ <div class="flex flex-row gap-2">
+ <Header inheritSize size="md" class="text-gray-800 text-md md:text-sm font-medium">{item.name}</Header>
+ {item.tag && <Tag class="text-sm md:text-xxs">{item.tag}</Tag>}
+ </div>
+ <p class="text-md md:text-sm text-gray-400 font-light">{item.description}</p>
+ </div>
+ </div>
+ </a>
+ </li>
+ ))}
+ </ul>
+ </ScrollbarOverlayContainer>
+ </div>
+ )}
+ </label>
+)}
+ </li>
+{/* WHY IS ESLINT DOING THIS */}
diff --git a/apps/website/src/components/icons/Icon.astro b/apps/website/src/components/icons/Icon.astro
index bf2b362..cfb14ca 100644
--- a/apps/website/src/components/icons/Icon.astro
+++ b/apps/website/src/components/icons/Icon.astro
@@ -1,28 +1,57 @@
---
-export type Icons = "chevron-down" | "download" | "book-open";
-
+import type { HTMLAttributes } from 'astro/types';
import { parse } from 'node-html-parser';
-import type { HTMLAttributes } from "astro/types";
-interface Props extends HTMLAttributes<"svg"> {
- icon: Icons;
- size?: number | [number, number];
+type _ModIcons =
+ | 'oneconfig'
+ | 'chatting'
+ | 'polysprint'
+ | 'vanillahud'
+ | 'overflowanimations'
+ | 'crashpatch'
+ | 'polytime'
+ | 'polyweather'
+ | 'keystrokes';
+export type ModIcons = _ModIcons; // bypass for Astro compiler issue https://github.com/withastro/compiler/issues/554#issuecomment-1741702411
+
+type _External =
+ | 'discord'
+ | 'github'
+ | 'youtube'
+ | 'twitter';
+
+export type External = _External;
+
+type _Icons =
+ | 'chevron-down'
+ | 'download'
+ | 'book-open'
+ | 'link-external'
+ | 'code'
+ | 'chat'
+ | 'user'
+ | External
+ | ModIcons;
+export type Icons = _Icons; // bypass for Astro compiler issue https://github.com/withastro/compiler/issues/554#issuecomment-1741702411
+
+interface Props extends HTMLAttributes<'svg'> {
+ icon: Icons
+ path?: string
+ size?: number | [number, number]
}
async function getSVG(name: string) {
- const file = await import(`./impl/${name}.svg?raw` /* @vite-ignore */);
+ const file = (await import(`./impl/${name}.svg?raw`)).default;
- if (!file) {
+ if (!file)
throw new Error(`${name} not found`);
- }
- const content = parse(file.default);
+ const content = parse(file);
const svg = content.querySelector('svg');
- if (!svg) {
+ if (!svg)
throw new Error(`${name} is not a valid SVG`);
- }
const { attributes, innerHTML } = svg;
@@ -39,13 +68,12 @@ const {
} = Astro.props as Props;
let svgAttributes = {};
-let html = "";
+let html = '';
try {
const sizeAttributes = () => {
- if (!size) {
+ if (!size)
return {};
- }
if (Array.isArray(size)) {
return {
@@ -58,7 +86,7 @@ try {
width: size,
height: size,
};
- }
+ };
const { attributes: baseAttributes, innerHTML } = await getSVG(icon);
svgAttributes = {
@@ -69,9 +97,11 @@ try {
const colorRegex = /(fill|stroke)=\"([^"]*)\"/g;
html = innerHTML.replaceAll(colorRegex, '$1="currentColor"');
-} catch (err) {
-
+}
+ catch (err) {
+ console.error(err);
+ // ignored
}
---
-<svg {...svgAttributes} set:html={html}></svg>
+ <svg {...svgAttributes} set:html={html}></svg>
diff --git a/apps/website/src/components/icons/impl/chat.svg b/apps/website/src/components/icons/impl/chat.svg
new file mode 100644
index 0000000..d0dd187
--- /dev/null
+++ b/apps/website/src/components/icons/impl/chat.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
+ <path d="M6.09436 11.2288C6.03221 10.8282 5.99996 10.4179 5.99996 10C5.99996 5.58172 9.60525 2 14.0526 2C18.4999 2 22.1052 5.58172 22.1052 10C22.1052 10.9981 21.9213 11.9535 21.5852 12.8345C21.5154 13.0175 21.4804 13.109 21.4646 13.1804C21.4489 13.2512 21.4428 13.301 21.4411 13.3735C21.4394 13.4466 21.4493 13.5272 21.4692 13.6883L21.8717 16.9585C21.9153 17.3125 21.9371 17.4895 21.8782 17.6182C21.8266 17.731 21.735 17.8205 21.6211 17.8695C21.4911 17.9254 21.3146 17.8995 20.9617 17.8478L17.7765 17.3809C17.6101 17.3565 17.527 17.3443 17.4512 17.3448C17.3763 17.3452 17.3245 17.3507 17.2511 17.3661C17.177 17.3817 17.0823 17.4172 16.893 17.4881C16.0097 17.819 15.0524 18 14.0526 18C13.6344 18 13.2237 17.9683 12.8227 17.9073M7.63158 22C10.5965 22 13 19.5376 13 16.5C13 13.4624 10.5965 11 7.63158 11C4.66668 11 2.26316 13.4624 2.26316 16.5C2.26316 17.1106 2.36028 17.6979 2.53955 18.2467C2.61533 18.4787 2.65322 18.5947 2.66566 18.6739C2.67864 18.7567 2.68091 18.8031 2.67608 18.8867C2.67145 18.9668 2.65141 19.0573 2.61134 19.2383L2 22L4.9948 21.591C5.15827 21.5687 5.24 21.5575 5.31137 21.558C5.38652 21.5585 5.42641 21.5626 5.50011 21.5773C5.5701 21.5912 5.67416 21.6279 5.88227 21.7014C6.43059 21.8949 7.01911 22 7.63158 22Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
+</svg>
diff --git a/apps/website/src/components/icons/impl/chatting.svg b/apps/website/src/components/icons/impl/chatting.svg
new file mode 100644
index 0000000..6ccac14
--- /dev/null
+++ b/apps/website/src/components/icons/impl/chatting.svg
@@ -0,0 +1,5 @@
+<svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M18.5919 40.2371H7.39267C4.45924 40.2371 1.5 38.01 1.5 33.0356V23.1326C1.5398 18.6185 3.22974 14.2747 6.25144 10.9209C9.27161 7.56525 13.4154 5.4309 17.9011 4.92008C18.3215 4.88963 18.7525 4.875 19.1815 4.875H19.2502C17.8505 6.01965 16.7872 7.52242 16.1737 9.22328C13.1048 10.0424 10.3906 11.8479 8.44897 14.3617C6.50734 16.8754 5.44605 19.9581 5.42887 23.1343V33.0373C5.42887 33.8052 5.57006 36.3096 7.39136 36.3096H18.5905C22.1186 36.2908 25.5185 34.9854 28.1525 32.6381C30.7865 30.2908 32.4735 27.0633 32.8969 23.5607C32.9202 23.2434 32.9319 22.9137 32.9324 22.5806H36.8617C36.8617 22.9988 36.8457 23.421 36.817 23.8361C36.3061 28.3245 34.1692 32.4704 30.8101 35.491C27.4536 38.5121 23.1076 40.2 18.5919 40.2371Z" fill="#DFE3EC"/>
+<path d="M39.2599 19.8405H25.5654C24.1335 19.8406 22.7338 19.416 21.5432 18.6206C20.3527 17.8251 19.4247 16.6944 18.8768 15.3715C18.3288 14.0487 18.1855 12.593 18.4648 11.1887C18.7442 9.78431 19.4337 8.49435 20.4462 7.48189C21.1169 6.80752 21.9147 6.27289 22.7934 5.90895C23.6721 5.54501 24.6143 5.35897 25.5654 5.3616H39.2599C40.6916 5.36145 42.0915 5.78591 43.2821 6.58132C44.4727 7.3767 45.4005 8.50729 45.9487 9.8301C46.4966 11.1529 46.6402 12.6085 46.3609 14.0129C46.0819 15.4173 45.3922 16.7073 44.3801 17.7198C43.7092 18.3943 42.9112 18.9291 42.0322 19.2931C41.1536 19.6572 40.2112 19.8432 39.2599 19.8405ZM25.0288 9.2745C23.4904 9.2745 22.2392 10.7668 22.2392 12.6006C22.2392 14.4345 23.4908 15.9267 25.0288 15.9267H39.7976C41.3362 15.9267 42.5876 14.4349 42.5876 12.6006C42.5876 10.7663 41.3362 9.2745 39.7976 9.2745H25.0288Z" fill="#E0E9FB"/>
+<path opacity="0.7" d="M28.5234 43.3675H31.8007C33.9729 43.3649 36.0554 42.5009 37.5914 40.9649C39.1274 39.4289 39.9914 37.3464 39.9941 35.1742V31.8969C39.9941 31.4623 39.8216 31.0455 39.5141 30.7382C39.2069 30.4309 38.7899 30.2583 38.3553 30.2583C37.9207 30.2583 37.5041 30.4309 37.1967 30.7382C36.8894 31.0455 36.7168 31.4623 36.7168 31.8969V35.1742C36.7169 35.8198 36.5897 36.4591 36.3427 37.0556C36.0957 37.6521 35.7335 38.194 35.277 38.6504C34.8205 39.1071 34.2785 39.469 33.6821 39.7161C33.0856 39.9633 32.4463 40.0904 31.8007 40.0904H28.5234C28.0888 40.0904 27.672 40.2629 27.3647 40.5704C27.0574 40.8775 26.8848 41.2945 26.8848 41.7288C26.8848 42.1634 27.0574 42.5804 27.3647 42.8875C27.672 43.195 28.0888 43.3675 28.5234 43.3675Z" fill="#E0E9FB"/>
+</svg>
diff --git a/apps/website/src/components/icons/impl/code.svg b/apps/website/src/components/icons/impl/code.svg
new file mode 100644
index 0000000..bc87d0a
--- /dev/null
+++ b/apps/website/src/components/icons/impl/code.svg
@@ -0,0 +1,3 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+ <path d="M17 17L22 12L17 7M7 7L2 12L7 17M14 3L10 21" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
+</svg>
diff --git a/apps/website/src/components/icons/impl/crashpatch.svg b/apps/website/src/components/icons/impl/crashpatch.svg
new file mode 100644
index 0000000..a0baa3e
--- /dev/null
+++ b/apps/website/src/components/icons/impl/crashpatch.svg
@@ -0,0 +1,5 @@
+<svg width="128" height="128" viewBox="0 0 128 128" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M93.0943 110.368H78.608C77.3264 110.368 76.0972 109.858 75.191 108.952C74.2847 108.046 73.7756 106.817 73.7756 105.535C73.7756 104.254 74.2847 103.024 75.191 102.118C76.0972 101.212 77.3264 100.703 78.608 100.703H93.0954L64.1417 52.3563L35.0988 100.752L49.6144 100.706C50.8961 100.706 52.1252 101.215 53.0315 102.121C53.9378 103.028 54.4469 104.257 54.4469 105.538C54.4469 106.82 53.9378 108.049 53.0315 108.955C52.1252 109.862 50.8961 110.371 49.6144 110.371H35.1187C33.4186 110.37 31.7486 109.921 30.2773 109.07C28.806 108.218 27.5853 106.993 26.7384 105.519C25.8915 104.044 25.4484 102.373 25.4536 100.673C25.4588 98.9728 25.9123 97.3041 26.7683 95.8351L55.7849 47.3891C56.643 45.9384 57.8653 44.7371 59.3305 43.9043C60.7958 43.0714 62.4533 42.6358 64.1387 42.6407C65.8241 42.6456 67.479 43.0907 68.9394 43.9321C70.3999 44.7734 71.6151 45.9817 72.4648 47.4373L101.419 95.789C102.286 97.2563 102.75 98.9269 102.763 100.631C102.776 102.336 102.339 104.014 101.494 105.494C100.65 106.975 99.4289 108.206 97.9551 109.062C96.4813 109.919 94.8073 110.37 93.1027 110.371L93.0943 110.368Z" fill="#DFE3EC"/>
+<path d="M24.9387 89.0467C18.8578 88.1908 13.2903 85.1686 9.25966 80.5357C5.22904 75.9028 3.00627 69.9706 3 63.8297L3 43.4604C3.00833 36.7104 5.69343 30.2393 10.4664 25.4664C15.2393 20.6934 21.7104 18.0083 28.4604 18L99.7515 18C106.502 18.0078 112.974 20.6926 117.747 25.4656C122.52 30.2386 125.206 36.7101 125.214 43.4604V63.8297C125.207 69.9705 122.984 75.9026 118.954 80.5353C114.923 85.168 109.355 88.19 103.274 89.0457L89.5674 66.0285V28.1842H38.6456V66.0296L24.9387 89.0467ZM99.7515 28.1842V79.107C103.802 79.1026 107.685 77.4916 110.549 74.6275C113.413 71.7634 115.024 67.8802 115.029 63.8297V43.4604C115.024 39.4101 113.413 35.5272 110.549 32.6633C107.685 29.7994 103.802 28.1886 99.7515 28.1842ZM28.4604 28.1842C24.4102 28.1886 20.5273 29.7995 17.6634 32.6634C14.7995 35.5273 13.1886 39.4102 13.1842 43.4604V63.8297C13.1886 67.88 14.7994 71.7631 17.6633 74.6271C20.5272 77.4912 24.4101 79.1023 28.4604 79.107V28.1842Z" fill="#DFE3EC"/>
+<path opacity="0.7" d="M68.9389 91.0441V76.5473C68.9389 75.2657 68.4297 74.0366 67.5235 73.1303C66.6172 72.224 65.3881 71.7149 64.1064 71.7149C62.8248 71.7149 61.5956 72.224 60.6894 73.1303C59.7831 74.0366 59.274 75.2657 59.274 76.5473V91.0441C59.274 92.3258 59.7831 93.5549 60.6894 94.4612C61.5956 95.3674 62.8248 95.8766 64.1064 95.8766C65.3881 95.8766 66.6172 95.3674 67.5235 94.4612C68.4297 93.5549 68.9389 92.3258 68.9389 91.0441ZM64.107 100.711C63.151 100.711 62.2166 100.995 61.4218 101.526C60.6271 102.057 60.0078 102.812 59.6422 103.695C59.2767 104.579 59.1814 105.551 59.3683 106.488C59.5553 107.425 60.0161 108.286 60.6925 108.962C61.3689 109.637 62.2304 110.097 63.1682 110.283C64.1059 110.469 65.0776 110.372 65.9604 110.005C66.8432 109.639 67.5974 109.018 68.1276 108.223C68.6578 107.427 68.9401 106.493 68.9389 105.537C68.9366 104.256 68.4266 103.029 67.5208 102.125C66.6149 101.22 65.3872 100.712 64.107 100.711Z" fill="#DFE3EC"/>
+</svg>
diff --git a/apps/website/src/components/icons/impl/discord.svg b/apps/website/src/components/icons/impl/discord.svg
new file mode 100644
index 0000000..7fcddad
--- /dev/null
+++ b/apps/website/src/components/icons/impl/discord.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 127.14 96.36"><path fill="currentColor" d="M107.7,8.07A105.15,105.15,0,0,0,81.47,0a72.06,72.06,0,0,0-3.36,6.83A97.68,97.68,0,0,0,49,6.83,72.37,72.37,0,0,0,45.64,0,105.89,105.89,0,0,0,19.39,8.09C2.79,32.65-1.71,56.6.54,80.21h0A105.73,105.73,0,0,0,32.71,96.36,77.7,77.7,0,0,0,39.6,85.25a68.42,68.42,0,0,1-10.85-5.18c.91-.66,1.8-1.34,2.66-2a75.57,75.57,0,0,0,64.32,0c.87.71,1.76,1.39,2.66,2a68.68,68.68,0,0,1-10.87,5.19,77,77,0,0,0,6.89,11.1A105.25,105.25,0,0,0,126.6,80.22h0C129.24,52.84,122.09,29.11,107.7,8.07ZM42.45,65.69C36.18,65.69,31,60,31,53s5-12.74,11.43-12.74S54,46,53.89,53,48.84,65.69,42.45,65.69Zm42.24,0C78.41,65.69,73.25,60,73.25,53s5-12.74,11.44-12.74S96.23,46,96.12,53,91.08,65.69,84.69,65.69Z"/></svg>
diff --git a/apps/website/src/components/icons/impl/evergreenhud.svg b/apps/website/src/components/icons/impl/evergreenhud.svg
new file mode 100644
index 0000000..3a33db7
--- /dev/null
+++ b/apps/website/src/components/icons/impl/evergreenhud.svg
@@ -0,0 +1,10 @@
+<svg width="128" height="128" viewBox="0 0 128 128" fill="none" xmlns="http://www.w3.org/2000/svg">
+ <path d="M55.6432 6.14761L55.6612 6.12077L56.3464 5.09395L57.6185 3.18747C57.9957 2.62232 58.8262 2.62232 59.2034 3.18747L60.4756 5.09395L61.1608 6.12077L61.1787 6.14761L63.837 10.1313C64.292 10.8132 63.7291 11.7231 62.9127 11.6492C61.4358 11.5153 59.94 11.4469 58.4282 11.4469C56.9042 11.4469 55.3964 11.5164 53.9078 11.6524C53.0911 11.727 52.5275 10.8167 52.9827 10.1346L55.6432 6.14761ZM45.0626 13.2896C45.2833 13.2272 45.4759 13.089 45.6031 12.8983L51.5161 4.03716C51.9624 3.36835 51.4287 2.48876 50.6317 2.59503C22.0488 6.40637 0 30.8821 0 60.5076C0 74.3602 4.82077 87.0868 12.8762 97.1014C13.2715 97.5928 14.0261 97.5553 14.3818 97.0345L18.8166 90.5426C19.047 90.2054 19.036 89.7594 18.795 89.4297C12.8669 81.3199 9.36756 71.3224 9.36756 60.5076C9.36756 38.0454 24.463 19.1089 45.0626 13.2896ZM71.2108 12.8863C71.3382 13.0773 71.5312 13.2156 71.7521 13.2778C92.373 19.0835 107.489 38.0303 107.489 60.5076C107.489 71.2735 104.021 81.2295 98.1416 89.3195C97.9021 89.6491 97.8918 90.0939 98.1216 90.4303L102.56 96.9278C102.916 97.4493 103.672 97.486 104.067 96.993C112.07 86.995 116.856 74.3102 116.856 60.5076C116.856 30.8688 94.7879 6.3845 66.1864 2.58994C65.3896 2.48423 64.8563 3.36361 65.3024 4.03218L71.2108 12.8863ZM19.0276 98.3965L21.5861 94.6512C21.9322 94.1445 22.6599 94.0927 23.0855 94.5347C25.4471 96.987 28.0616 99.1942 30.887 101.114C31.6927 101.662 31.3172 103.001 30.343 103.001H21.4584H21.2181H19.0812H18.7046C18.4615 103.001 18.2272 102.908 18.0515 102.74C17.6666 102.372 17.2867 101.999 16.9119 101.62C16.8827 101.591 16.8767 101.545 16.9001 101.511V101.511L17.6867 100.359L18.892 98.5949L19.0276 98.3965ZM58.4282 109.568C53.6902 109.568 49.1091 108.897 44.7749 107.643C44.6881 107.618 44.5982 107.605 44.5078 107.605H26.7462C25.8262 107.605 25.4562 108.759 26.2234 109.267C35.4567 115.377 46.5269 118.936 58.4282 118.936C70.3295 118.936 81.3997 115.377 90.633 109.267C91.4002 108.759 91.0301 107.605 90.1101 107.605H72.3486C72.2582 107.605 72.1683 107.618 72.0814 107.643C67.7472 108.897 63.1661 109.568 58.4282 109.568ZM97.9337 103.001H98.1517C98.3949 103.001 98.6291 102.908 98.8048 102.74C99.0507 102.505 99.2946 102.268 99.5363 102.028C99.8598 101.708 99.9042 101.202 99.6474 100.827L99.3282 100.359L98.1229 98.5949L97.9873 98.3965L95.3629 94.5547C95.0162 94.0472 94.2869 93.9962 93.8617 94.4401C91.4763 96.9303 88.831 99.1696 85.9693 101.114C85.1636 101.662 85.5392 103.001 86.5133 103.001H95.5565H95.7968H97.9337Z"
+ fill="white"/>
+ <path d="M57.7208 41.7549C58.0991 41.2012 58.9158 41.2012 59.294 41.7549L100.115 101.511C100.547 102.143 100.094 103.001 99.3282 103.001H17.6866C16.9209 103.001 16.4681 102.143 16.9 101.511L57.7208 41.7549Z"
+ fill="white"/>
+ <path d="M57.6092 17.7249C57.9841 17.141 58.8376 17.141 59.2125 17.7249L92.3213 69.2951C92.7283 69.9291 92.273 70.7624 91.5196 70.7624H25.3021C24.5487 70.7624 24.0935 69.9291 24.5005 69.2951L57.6092 17.7249Z"
+ fill="white"/>
+ <path d="M57.6185 3.18748C57.9956 2.62234 58.8262 2.62234 59.2033 3.18748L84.084 40.4732C84.5065 41.1062 84.0527 41.9546 83.2916 41.9546H33.5302C32.7691 41.9546 32.3154 41.1062 32.7378 40.4732L57.6185 3.18748Z"
+ fill="white"/>
+</svg>
diff --git a/apps/website/src/components/icons/impl/github.svg b/apps/website/src/components/icons/impl/github.svg
new file mode 100644
index 0000000..cb3681d
--- /dev/null
+++ b/apps/website/src/components/icons/impl/github.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor" viewBox="0 0 16 16">
+ <path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8"/>
+ </svg>
diff --git a/apps/website/src/components/icons/impl/keystrokes.svg b/apps/website/src/components/icons/impl/keystrokes.svg
new file mode 100644
index 0000000..f8c3605
--- /dev/null
+++ b/apps/website/src/components/icons/impl/keystrokes.svg
@@ -0,0 +1,7 @@
+<svg width="128" height="128" viewBox="0 0 128 128" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M73.5896 52.2437H54.978C52.6406 52.2411 50.3997 51.3115 48.7469 49.6587C47.0942 48.0059 46.1645 45.765 46.1619 43.4277V24.816C46.1645 22.4787 47.0942 20.2378 48.7469 18.585C50.3997 16.9323 52.6406 16.0026 54.978 16H73.5896C75.927 16.0026 78.1679 16.9323 79.8206 18.585C81.4734 20.2378 82.4031 22.4787 82.4056 24.816V43.4277C82.4031 45.765 81.4734 48.0059 79.8206 49.6587C78.1679 51.3115 75.927 52.2411 73.5896 52.2437ZM54.978 21.8774C54.1986 21.8774 53.4511 22.187 52.9 22.7381C52.3489 23.2892 52.0393 24.0367 52.0393 24.816V43.4277C52.0393 44.2071 52.3489 44.9545 52.9 45.5056C53.4511 46.0568 54.1986 46.3664 54.978 46.3664H73.5896C74.369 46.3664 75.1165 46.0568 75.6676 45.5056C76.2187 44.9545 76.5283 44.2071 76.5283 43.4277V24.816C76.5283 24.0367 76.2187 23.2892 75.6676 22.7381C75.1165 22.187 74.369 21.8774 73.5896 21.8774H54.978Z" fill="#E0E9FB"/>
+<path d="M73.5896 92.4057H54.978C52.6406 92.4031 50.3997 91.4734 48.7469 89.8207C47.0942 88.1679 46.1645 85.927 46.1619 83.5896V64.978C46.1645 62.6406 47.0942 60.3997 48.7469 58.747C50.3997 57.0942 52.6406 56.1645 54.978 56.162H73.5896C75.927 56.1645 78.1679 57.0942 79.8206 58.747C81.4734 60.3997 82.4031 62.6406 82.4056 64.978V83.5896C82.4031 85.927 81.4734 88.1679 79.8206 89.8207C78.1679 91.4734 75.927 92.4031 73.5896 92.4057ZM54.978 62.0393C54.1986 62.0393 53.4511 62.3489 52.9 62.9C52.3489 63.4511 52.0393 64.1986 52.0393 64.978V83.5896C52.0393 84.369 52.3489 85.1165 52.9 85.6676C53.4511 86.2187 54.1986 86.5283 54.978 86.5283H73.5896C74.369 86.5283 75.1165 86.2187 75.6676 85.6676C76.2187 85.1165 76.5283 84.369 76.5283 83.5896V64.978C76.5283 64.1986 76.2187 63.4511 75.6676 62.9C75.1165 62.3489 74.369 62.0393 73.5896 62.0393H54.978Z" fill="#E0E9FB"/>
+<path d="M33.4277 92.4057H14.816C12.4787 92.4031 10.2378 91.4734 8.58502 89.8207C6.93226 88.1679 6.00259 85.927 6 83.5896V64.978C6.00259 62.6406 6.93226 60.3997 8.58502 58.747C10.2378 57.0942 12.4787 56.1645 14.816 56.162H33.4277C35.765 56.1645 38.0059 57.0942 39.6587 58.747C41.3115 60.3997 42.2411 62.6406 42.2437 64.978V83.5896C42.2411 85.927 41.3115 88.1679 39.6587 89.8207C38.0059 91.4734 35.765 92.4031 33.4277 92.4057ZM14.816 62.0393C14.0367 62.0393 13.2892 62.3489 12.7381 62.9C12.187 63.4511 11.8774 64.1986 11.8774 64.978V83.5896C11.8774 84.369 12.187 85.1165 12.7381 85.6676C13.2892 86.2187 14.0367 86.5283 14.816 86.5283H33.4277C34.2071 86.5283 34.9545 86.2187 35.5056 85.6676C36.0568 85.1165 36.3664 84.369 36.3664 83.5896V64.978C36.3664 64.1986 36.0568 63.4511 35.5056 62.9C34.9545 62.3489 34.2071 62.0393 33.4277 62.0393H14.816Z" fill="#E0E9FB"/>
+<path d="M113.752 92.4057H95.14C92.8026 92.4031 90.5617 91.4734 88.9089 89.8207C87.2562 88.1679 86.3265 85.927 86.3239 83.5896V64.978C86.3265 62.6406 87.2562 60.3997 88.9089 58.747C90.5617 57.0942 92.8026 56.1645 95.14 56.162H113.752C116.089 56.1645 118.33 57.0942 119.983 58.747C121.635 60.3997 122.565 62.6406 122.568 64.978V83.5896C122.565 85.927 121.635 88.1679 119.983 89.8207C118.33 91.4734 116.089 92.4031 113.752 92.4057ZM95.14 62.0393C94.3606 62.0393 93.6131 62.3489 93.062 62.9C92.5109 63.4511 92.2013 64.1986 92.2013 64.978V83.5896C92.2013 84.369 92.5109 85.1165 93.062 85.6676C93.6131 86.2187 94.3606 86.5283 95.14 86.5283H113.752C114.531 86.5283 115.278 86.2187 115.83 85.6676C116.381 85.1165 116.69 84.369 116.69 83.5896V64.978C116.69 64.1986 116.381 63.4511 115.83 62.9C115.278 62.3489 114.531 62.0393 113.752 62.0393H95.14Z" fill="#E0E9FB"/>
+<path d="M114.241 112.976H14.3263C12.118 112.976 10.0002 112.099 8.43871 110.538C6.87723 108.976 6 106.858 6 104.65C6 102.442 6.87723 100.324 8.43871 98.7626C10.0002 97.2012 12.118 96.3239 14.3263 96.3239H114.241C116.45 96.3239 118.567 97.2012 120.129 98.7626C121.69 100.324 122.568 102.442 122.568 104.65C122.568 106.858 121.69 108.976 120.129 110.538C118.567 112.099 116.45 112.976 114.241 112.976ZM14.3263 102.201C13.6768 102.201 13.0539 102.459 12.5946 102.919C12.1354 103.378 11.8774 104.001 11.8774 104.65C11.8774 105.3 12.1354 105.923 12.5946 106.382C13.0539 106.841 13.6768 107.099 14.3263 107.099H114.241C114.891 107.099 115.514 106.841 115.973 106.382C116.432 105.923 116.69 105.3 116.69 104.65C116.69 104.001 116.432 103.378 115.973 102.919C115.514 102.459 114.891 102.201 114.241 102.201H14.3263Z" fill="#E0E9FB"/>
+</svg>
diff --git a/apps/website/src/components/icons/impl/link-external.svg b/apps/website/src/components/icons/impl/link-external.svg
new file mode 100644
index 0000000..7b09b3c
--- /dev/null
+++ b/apps/website/src/components/icons/impl/link-external.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none">
+ <path d="M17.5 7.5L17.5 2.5M17.5 2.5H12.5M17.5 2.5L10.8333 9.16667M8.33333 4.16667H6.5C5.09987 4.16667 4.3998 4.16667 3.86502 4.43915C3.39462 4.67883 3.01217 5.06129 2.77248 5.53169C2.5 6.06647 2.5 6.76654 2.5 8.16667V13.5C2.5 14.9001 2.5 15.6002 2.77248 16.135C3.01217 16.6054 3.39462 16.9878 3.86502 17.2275C4.3998 17.5 5.09987 17.5 6.5 17.5H11.8333C13.2335 17.5 13.9335 17.5 14.4683 17.2275C14.9387 16.9878 15.3212 16.6054 15.5608 16.135C15.8333 15.6002 15.8333 14.9001 15.8333 13.5V11.6667" stroke="currentColor" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
+</svg>
diff --git a/apps/website/src/components/icons/impl/oneconfig.svg b/apps/website/src/components/icons/impl/oneconfig.svg
new file mode 100644
index 0000000..cba37ab
--- /dev/null
+++ b/apps/website/src/components/icons/impl/oneconfig.svg
@@ -0,0 +1,5 @@
+<svg width="72" height="72" viewBox="0 0 72 72" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M70.3573 29.2713C70.4668 29.4694 70.5816 29.6767 70.6705 29.8925C72.5332 33.8023 72.4576 39.4449 70.3235 43.2681L62.5582 56.7093C60.2619 53.2001 57.0453 50.1892 53.179 47.9147C53.2764 47.7633 53.3629 47.6115 53.4386 47.4597C60.2945 33.5858 53.179 15.2605 36.0014 15.531C18.521 15.2387 11.6106 33.8998 18.7699 47.9581C14.9248 50.2327 11.7301 53.2323 9.44449 56.7311C9.39106 56.6172 8.6306 55.3104 7.58772 53.5173C5.05245 49.1586 0.846575 41.9292 1.06183 41.9903C-0.378748 38.5028 -0.357048 33.7371 1.14855 30.2931C1.23897 30.0503 1.35108 29.816 1.46904 29.5906C1.53458 29.4646 1.60229 29.3414 1.6684 29.221L12.737 10.029C12.7534 10.0072 12.7672 9.98229 12.7809 9.95773C12.7947 9.93358 12.8079 9.90983 12.8238 9.88849C15.1089 6.08684 20.5135 3 24.9217 3H47.0594C52.0848 3 56.7313 5.68599 59.2333 10.029C59.2587 10.0612 63.1081 16.7246 66.2643 22.1876C68.4515 25.9738 70.3054 29.1836 70.3235 29.2101L70.3573 29.2713Z" fill="#0048C5"/>
+<path d="M25.8187 55.0747C31.6347 58.367 40.4507 58.3561 46.1367 55.053C50.989 57.4572 54.52 61.5514 55.6138 66.3601C53.2201 68.1254 50.274 69.3275 47.6098 69.4576C47.4367 69.4793 47.2418 69.4793 47.0683 69.4793C46.9169 69.4753 43.9049 69.4773 40.1347 69.4797H39.9375C33.4769 69.4837 24.9266 69.489 24.6492 69.4684C21.9197 69.4036 18.8545 68.1903 16.396 66.3601C17.4685 61.5622 20.9886 57.4789 25.8187 55.0747Z" fill="#0A5BE8"/>
+<path d="M46.9384 36.2502C47.3172 51.3589 24.6811 51.348 25.0604 36.2502C24.8547 21.0549 47.1333 21.0549 46.9384 36.2502Z" fill="#0A5BE8"/>
+</svg>
diff --git a/apps/website/src/components/icons/impl/overflowanimations.svg b/apps/website/src/components/icons/impl/overflowanimations.svg
new file mode 100644
index 0000000..642974c
--- /dev/null
+++ b/apps/website/src/components/icons/impl/overflowanimations.svg
@@ -0,0 +1,8 @@
+<svg width="128" height="128" viewBox="0 0 128 128" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path opacity="0.8" d="M44.6963 63.693C63.1821 55.4773 74.4787 83.2061 74.4787 83.2061C74.4787 70.2693 74.4787 56.4292 80.9138 48.3861" stroke="#E0E9FB" stroke-opacity="0.9" stroke-width="7" stroke-linecap="round" stroke-linejoin="round"/>
+<path d="M91.7153 46.2214C96.6195 46.2214 100.595 42.2804 100.595 37.4189C100.595 32.5574 96.6195 28.6164 91.7153 28.6164C86.8112 28.6164 82.8357 32.5574 82.8357 37.4189C82.8357 42.2804 86.8112 46.2214 91.7153 46.2214Z" fill="#E0E9FB"/>
+<path opacity="0.5" d="M34.5752 72.6498C36.7403 72.6498 38.4954 70.8947 38.4954 68.7297C38.4954 66.5646 36.7403 64.8095 34.5752 64.8095C32.4102 64.8095 30.6551 66.5646 30.6551 68.7297C30.6551 70.8947 32.4102 72.6498 34.5752 72.6498Z" fill="#E0E9FB"/>
+<path opacity="0.3" d="M26.3795 81.2018C28.7414 81.2018 30.656 79.2872 30.656 76.9254C30.656 74.5636 28.7414 72.6489 26.3795 72.6489C24.0177 72.6489 22.1031 74.5636 22.1031 76.9254C22.1031 79.2872 24.0177 81.2018 26.3795 81.2018Z" fill="#E0E9FB"/>
+<path d="M44.8775 101.424H26.6726C23.8258 101.426 21.0065 100.867 18.376 99.7792C15.7455 98.6909 13.3554 97.0946 11.3424 95.0816C9.32945 93.0687 7.73316 90.6785 6.64486 88.048C5.55656 85.4175 4.99761 82.5982 5.00001 79.7515V34.6726C4.99773 31.8258 5.55675 29.0066 6.64509 26.3761C7.73343 23.7457 9.32973 21.3556 11.3427 19.3427C13.3556 17.3297 15.7457 15.7334 18.3761 14.6451C21.0066 13.5567 23.8258 12.9977 26.6726 13H100.359C103.206 12.9977 106.025 13.5567 108.656 14.6451C111.286 15.7334 113.676 17.3297 115.689 19.3427C117.702 21.3556 119.298 23.7457 120.387 26.3761C121.475 29.0066 122.034 31.8258 122.032 34.6726V79.7515C122.034 82.5982 121.475 85.4174 120.387 88.0479C119.298 90.6784 117.702 93.0684 115.689 95.0814C113.676 97.0943 111.286 98.6906 108.656 99.7789C106.025 100.867 103.206 101.426 100.359 101.424H82.1543V95.3557H100.359C104.496 95.3511 108.463 93.7056 111.388 90.7803C114.313 87.8549 115.959 83.8886 115.963 79.7515V34.6726C115.959 30.5355 114.313 26.5691 111.388 23.6438C108.463 20.7184 104.496 19.0729 100.359 19.0683H26.6726C22.5355 19.0729 18.5691 20.7184 15.6438 23.6438C12.7184 26.5691 11.0729 30.5355 11.0683 34.6726V79.7515C11.0729 83.8886 12.7184 87.8549 15.6438 90.7803C18.5691 93.7056 22.5355 95.3511 26.6726 95.3557H44.8775V101.424Z" fill="#E0E9FB"/>
+<path d="M57.0497 114.377C56.1257 114.373 55.2155 114.152 54.3927 113.731C53.4226 113.253 52.6074 112.51 52.0412 111.588C51.4749 110.667 51.1806 109.604 51.1921 108.523V89.495C51.1804 88.4136 51.4745 87.351 52.0404 86.4295C52.6064 85.508 53.4212 84.7652 54.3909 84.2866C55.353 83.797 56.4322 83.5846 57.508 83.6733C58.5838 83.7619 59.6138 84.1481 60.4827 84.7886L73.4559 94.3002C74.1951 94.8426 74.7963 95.5515 75.2107 96.3695C75.625 97.1874 75.841 98.0914 75.841 99.0084C75.841 99.9253 75.625 100.829 75.2107 101.647C74.7963 102.465 74.1951 103.174 73.4559 103.717L60.4818 113.225C59.4904 113.964 58.2876 114.366 57.0506 114.371L57.0497 114.377ZM57.0445 87.1656C56.6749 87.1669 56.3109 87.256 55.9826 87.4257C55.5956 87.6128 55.2704 87.907 55.0455 88.2733C54.8206 88.6395 54.7053 89.0626 54.7134 89.4924V108.523C54.706 108.952 54.8215 109.375 55.0463 109.741C55.2712 110.107 55.596 110.402 55.9826 110.589C56.3622 110.79 56.7913 110.878 57.2193 110.843C57.6473 110.808 58.0565 110.652 58.3986 110.393L71.3727 100.877C71.6663 100.662 71.9051 100.381 72.0698 100.057C72.2344 99.732 72.3202 99.3732 72.3202 99.0092C72.3202 98.6453 72.2344 98.2865 72.0698 97.9619C71.9051 97.6373 71.6663 97.3561 71.3727 97.141L58.4004 87.6268C58.0097 87.3314 57.5343 87.1697 57.0445 87.1656Z" fill="#E0E9FB"/>
+</svg>
diff --git a/apps/website/src/components/icons/impl/polysprint.svg b/apps/website/src/components/icons/impl/polysprint.svg
new file mode 100644
index 0000000..3480b7f
--- /dev/null
+++ b/apps/website/src/components/icons/impl/polysprint.svg
@@ -0,0 +1,13 @@
+<svg width="128" height="128" viewBox="0 0 128 128" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g clip-path="url(#clip0_103_2)">
+<path d="M125 64.2696C125.001 64.8187 124.895 65.3627 124.686 65.8705C124.477 66.3783 124.17 66.8399 123.782 67.229C123.395 67.618 122.935 67.9269 122.428 68.1379C121.921 68.3489 121.377 68.4579 120.828 68.4586H108.853C106.695 68.4501 104.575 67.8861 102.698 66.8208C100.82 65.7556 99.249 64.2249 98.1347 62.3763L92.4275 52.8626L86.2236 68.0399C86.0287 68.5659 85.7298 69.0473 85.3448 69.4553C84.9598 69.8633 84.4966 70.1896 83.9828 70.4148C83.469 70.6399 82.915 70.7592 82.3541 70.7656C81.7932 70.772 81.2367 70.6654 80.7178 70.4521C80.199 70.2388 79.7284 69.9232 79.3342 69.5241C78.9399 69.125 78.6301 68.6506 78.4232 68.1291C78.2163 67.6077 78.1165 67.05 78.1298 66.4891C78.1431 65.9283 78.2693 65.3759 78.5007 64.8649L85.5932 47.5152H77.5037L68.892 68.5934C68.5202 69.5034 68.4794 70.5149 68.7768 71.4519C69.0742 72.3888 69.6909 73.1917 70.5194 73.7206L89.6778 85.8738C90.2725 86.2516 90.7624 86.7732 91.1023 87.3903C91.4421 88.0075 91.621 88.7003 91.6223 89.4049V110.351C91.6223 111.458 91.1827 112.519 90.4003 113.301C89.6178 114.084 88.5565 114.524 87.4499 114.524C86.3433 114.524 85.282 114.084 84.4995 113.301C83.717 112.519 83.2774 111.458 83.2774 110.351V91.713L66.0626 80.8207C63.5679 79.2354 61.7103 76.8233 60.8148 74.0064C59.9193 71.1896 60.043 68.1475 61.1643 65.4127L68.4828 47.5152H59.2293C58.4535 47.5131 57.6927 47.7288 57.0334 48.1377C56.3741 48.5466 55.8427 49.1323 55.4998 49.8281L49.4612 61.9529C49.2193 62.4499 48.8811 62.894 48.4664 63.2595C48.0516 63.6249 47.5684 63.9044 47.0448 64.0817C46.5213 64.259 45.9677 64.3307 45.4162 64.2925C44.8648 64.2544 44.3263 64.1071 43.8322 63.8594C43.338 63.6116 42.898 63.2682 42.5375 62.8491C42.177 62.43 41.9033 61.9436 41.7322 61.4179C41.5611 60.8923 41.496 60.3379 41.5407 59.7869C41.5854 59.236 41.739 58.6993 41.9926 58.2082L48.0341 46.0549C49.0662 43.9697 50.6621 42.2155 52.6408 40.9916C54.6195 39.7676 56.9017 39.1228 59.2283 39.1305H86.8579C89.0185 39.1381 91.1406 39.7022 93.0199 40.7684C94.8991 41.8346 96.472 43.3668 97.5869 45.2175L105.278 58.0486C105.649 58.6645 106.173 59.1744 106.798 59.5294C107.424 59.8844 108.13 60.0725 108.849 60.0758H120.828C121.377 60.0765 121.921 60.1857 122.429 60.3969C122.936 60.6082 123.397 60.9175 123.784 61.3071C124.172 61.6967 124.479 62.1589 124.687 62.6672C124.896 63.1756 125.002 63.7201 125 64.2696ZM61.8945 84.4363C61.3851 84.2316 60.8403 84.1297 60.2914 84.1362C59.7425 84.1428 59.2003 84.2578 58.6959 84.4746C58.1916 84.6914 57.7351 85.0057 57.3526 85.3994C56.9702 85.7932 56.6693 86.2587 56.4673 86.7691C56.1623 87.5479 55.6289 88.2162 54.9373 88.6864C54.2456 89.1567 53.4279 89.4068 52.5916 89.4039H41.5549C40.4439 89.4039 39.3784 89.8453 38.5928 90.6309C37.8072 91.4165 37.3659 92.482 37.3659 93.593C37.3659 94.704 37.8072 95.7695 38.5928 96.5551C39.3784 97.3407 40.4439 97.782 41.5549 97.782H52.5954C55.1028 97.7874 57.5536 97.0362 59.6275 95.6267C61.7013 94.2172 63.3018 92.2149 64.2197 89.8815C64.6316 88.8509 64.6182 87.6991 64.1826 86.6783C63.7469 85.6575 62.9245 84.851 61.8954 84.4353L61.8945 84.4363ZM91.6223 34.9452C93.6953 34.9535 95.7242 34.3463 97.4519 33.2007C99.1795 32.055 100.528 30.4224 101.327 28.5095C102.127 26.5967 102.34 24.4897 101.941 22.4555C101.541 20.4213 100.547 18.5514 99.0845 17.0825C97.6216 15.6137 95.7558 14.612 93.7232 14.2044C91.6906 13.7968 89.5828 14.0016 87.6668 14.7929C85.7507 15.5842 84.1125 16.9263 82.9598 18.6493C81.8071 20.3723 81.1917 22.3986 81.1915 24.4716C81.1886 25.8442 81.4561 27.204 81.9788 28.4732C82.5014 29.7424 83.269 30.8963 84.2376 31.8689C85.2062 32.8414 86.3569 33.6137 87.624 34.1415C88.8911 34.6694 90.2497 34.9425 91.6223 34.9452Z" fill="#E0E9FB"/>
+<path opacity="0.7" d="M33.5888 62.1856H2" stroke="#E0E9FB" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
+<path opacity="0.5" d="M27.6035 46.2337H2.4293" stroke="#E0E9FB" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
+<path opacity="0.9" d="M44.5079 76.8745H2.4293" stroke="#E0E9FB" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
+</g>
+<defs>
+<clipPath id="clip0_103_2">
+<rect width="128" height="128" fill="white"/>
+</clipPath>
+</defs>
+</svg>
diff --git a/apps/website/src/components/icons/impl/polytime.svg b/apps/website/src/components/icons/impl/polytime.svg
new file mode 100644
index 0000000..e06cfd7
--- /dev/null
+++ b/apps/website/src/components/icons/impl/polytime.svg
@@ -0,0 +1,11 @@
+<svg width="128" height="128" viewBox="0 0 128 128" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M124.392 59.2846C124.448 60.6156 123.974 61.9145 123.074 62.8963C122.173 63.8782 120.92 64.4629 119.59 64.5221C118.259 64.5814 116.959 64.1104 115.975 63.2125C114.991 62.3145 114.403 61.0629 114.34 59.7322C113.47 50.221 109.908 41.1547 104.071 33.5951C98.2333 26.0356 90.3628 20.2958 81.3811 17.048C72.3993 13.8002 62.678 13.179 53.3559 15.257C44.0337 17.335 35.4967 22.0262 28.7447 28.7812C21.9926 35.5363 17.3051 44.0754 15.2312 53.3984C13.1573 62.7215 13.7828 72.4424 17.0345 81.4228C20.2862 90.4032 26.0295 98.2711 33.5916 104.105C41.1538 109.939 50.2216 113.497 59.7332 114.363C61.0609 114.483 62.2865 115.126 63.1405 116.149C63.9945 117.173 64.4069 118.494 64.287 119.821C64.1671 121.149 63.5247 122.375 62.5011 123.229C61.4775 124.083 60.1566 124.495 58.829 124.375C47.415 123.333 36.5343 119.06 27.4612 112.057C18.388 105.054 11.4981 95.6111 7.59844 84.8335C3.69875 74.0559 2.95074 62.3902 5.44201 51.2029C7.93328 40.0155 13.5607 29.7696 21.6651 21.6651C29.7696 13.5607 40.0155 7.93328 51.2029 5.44201C62.3902 2.95074 74.0559 3.69875 84.8335 7.59844C95.6111 11.4981 105.054 18.388 112.057 27.4612C119.06 36.5343 123.333 47.415 124.375 58.829C124.387 58.9829 124.392 59.1387 124.392 59.2846Z" fill="#E0E9FB"/>
+<path opacity="0.88" d="M64.5364 34.6038C63.8814 34.6038 63.2328 34.7328 62.6276 34.9835C62.0225 35.2341 61.4726 35.6015 61.0094 36.0647C60.5463 36.5279 60.1789 37.0777 59.9282 37.6829C59.6775 38.2881 59.5485 38.9367 59.5485 39.5917V61.167L42.7323 71.7023C41.6078 72.4046 40.8083 73.5247 40.5097 74.8165C40.2111 76.1082 40.4379 77.4656 41.1401 78.5901C41.8424 79.7147 42.9626 80.5142 44.2543 80.8128C45.546 81.1114 46.9034 80.8846 48.028 80.1823L67.1852 68.2102C67.909 67.7566 68.5042 67.1249 68.9137 66.3754C69.3233 65.6259 69.5335 64.7837 69.5243 63.9297V39.5917C69.5243 38.9367 69.3953 38.2881 69.1446 37.6829C68.894 37.0777 68.5266 36.5279 68.0634 36.0647C67.6002 35.6015 67.0504 35.2341 66.4452 34.9835C65.84 34.7328 65.1914 34.6038 64.5364 34.6038Z" fill="#E0E9FB"/>
+<path d="M98.8242 78.2264L79.2343 97.8103C77.9552 99.0828 76.941 100.596 76.2505 102.263C75.5601 103.93 75.2069 105.717 75.2116 107.521V112.966C75.2119 113.876 75.5737 114.749 76.2174 115.393C76.8612 116.037 77.7343 116.399 78.6448 116.399H84.0883C85.8921 116.404 87.6789 116.051 89.3453 115.36C91.0117 114.67 92.5245 113.656 93.7963 112.376L113.387 92.7855C115.318 90.8537 116.403 88.2342 116.403 85.5029C116.403 82.7717 115.318 80.1522 113.387 78.2204C111.426 76.3465 108.817 75.3008 106.105 75.3008C103.392 75.3008 100.784 76.3465 98.8222 78.2204L98.8242 78.2264ZM108.532 87.9345L88.9383 107.522C88.3028 108.162 87.5465 108.67 86.7132 109.015C85.8799 109.361 84.9863 109.537 84.0843 109.534H82.073V107.522C82.0711 106.62 82.2482 105.727 82.5941 104.893C82.9401 104.06 83.448 103.304 84.0883 102.668L103.682 83.0774C104.336 82.4529 105.205 82.1043 106.109 82.1043C107.013 82.1043 107.883 82.4529 108.536 83.0774C108.855 83.3961 109.108 83.7744 109.281 84.1909C109.453 84.6073 109.542 85.0537 109.542 85.5045C109.542 85.9552 109.453 86.4016 109.281 86.818C109.108 87.2345 108.855 87.6128 108.536 87.9315L108.532 87.9345Z" fill="url(#paint0_linear_103_29)"/>
+<defs>
+<linearGradient id="paint0_linear_103_29" x1="77.4359" y1="76.8214" x2="116.319" y2="113.939" gradientUnits="userSpaceOnUse">
+<stop stop-color="#E0E9FB"/>
+<stop offset="1" stop-color="#E0E9FB" stop-opacity="0.769"/>
+</linearGradient>
+</defs>
+</svg>
diff --git a/apps/website/src/components/icons/impl/polyweather.svg b/apps/website/src/components/icons/impl/polyweather.svg
new file mode 100644
index 0000000..85dae03
--- /dev/null
+++ b/apps/website/src/components/icons/impl/polyweather.svg
@@ -0,0 +1,12 @@
+<svg width="128" height="128" viewBox="0 0 128 128" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M26.7251 100.218C26.1892 100.219 25.6572 100.127 25.1522 99.9483C20.953 98.4083 17.2188 95.8174 14.3063 92.423C11.3938 89.0286 9.40031 84.9441 8.51618 80.5598C7.63205 76.1754 7.88686 71.6375 9.25626 67.3797C10.6257 63.1218 13.0639 59.2862 16.3381 56.2392C16.9451 55.7259 17.4127 55.0676 17.6975 54.3254C17.9823 53.5832 18.0751 52.7812 17.9673 51.9936C17.103 47.4921 17.0501 42.8724 17.8112 38.3523C19.0795 30.7567 22.6543 23.7353 28.0503 18.2412C33.4464 12.7471 40.4023 9.04651 47.9739 7.64171C56.1959 6.11157 64.693 7.33557 72.1488 11.1241C79.6046 14.9126 85.603 21.0542 89.2146 28.5973C89.5485 29.2885 90.0399 29.8918 90.6493 30.3586C91.2588 30.8254 91.9693 31.1426 92.7236 31.2848C123.539 37.0411 131.537 79.3393 104.835 95.8468C104.314 96.1976 103.727 96.4405 103.11 96.5614C102.492 96.6822 101.857 96.6786 101.242 96.5507C100.626 96.4227 100.042 96.1731 99.524 95.8164C99.0061 95.4596 98.5646 95.0031 98.2256 94.4734C97.8865 93.9437 97.6567 93.3517 97.5496 92.732C97.4425 92.1123 97.4603 91.4775 97.6019 90.8647C97.7435 90.252 98.006 89.6738 98.3742 89.1639C98.7423 88.654 99.2086 88.2229 99.7457 87.8957C119.313 76.0198 113.363 44.5509 90.8783 40.5403C88.6773 40.1204 86.6069 39.1859 84.836 37.8132C83.0652 36.4404 81.6441 34.6683 80.6888 32.6415C78.1241 27.1887 73.8876 22.6957 68.5949 19.8152C63.3021 16.9347 57.2288 15.8168 51.2573 16.6238C45.2858 17.4309 39.7271 20.121 35.3889 24.3032C31.0507 28.4853 28.159 33.9418 27.1338 39.8797C26.5569 43.2904 26.5953 46.7768 27.2474 50.1739C27.6657 52.5563 27.467 55.0061 26.6703 57.29C25.8735 59.5738 24.5052 61.6156 22.6957 63.2208C20.6119 65.1596 19.0599 67.6003 18.188 70.3097C17.3161 73.0192 17.1533 75.9069 17.7152 78.6972C18.2771 81.4874 19.545 84.0871 21.3977 86.2478C23.2504 88.4085 25.6261 90.0583 28.2979 91.0394C29.3518 91.4079 30.241 92.1379 30.8077 93.0998C31.3743 94.0618 31.5818 95.1934 31.3932 96.2938C31.2047 97.3942 30.6323 98.3922 29.7776 99.1106C28.923 99.8289 27.8415 100.221 26.7251 100.218Z" fill="#E0E9FB"/>
+<g opacity="0.8">
+<path d="M92.9323 82.7431C94.0099 80.2049 92.8258 77.2737 90.2875 76.1962C87.7493 75.1186 84.8181 76.3027 83.7406 78.8409L69.1778 113.143C68.1002 115.682 69.2843 118.613 71.8225 119.69C74.3608 120.768 77.292 119.584 78.3695 117.046L92.9323 82.7431Z" fill="#E0E9FB"/>
+<path opacity="0.4" d="M73.6875 119.692C76.4434 119.692 78.6775 117.458 78.6775 114.702C78.6775 111.946 76.4434 109.712 73.6875 109.712C70.9315 109.712 68.6974 111.946 68.6974 114.702C68.6974 117.458 70.9315 119.692 73.6875 119.692Z" fill="#E0E9FB"/>
+</g>
+<path opacity="0.9" d="M74.2067 82.738C75.2835 80.2011 74.1 77.2717 71.5631 76.1948C69.0262 75.118 66.0968 76.3016 65.0199 78.8384L50.8838 112.141C49.807 114.678 50.9906 117.607 53.5275 118.684C56.0643 119.761 58.9938 118.577 60.0706 116.041L74.2067 82.738Z" fill="#E0E9FB"/>
+<path d="M65.4139 97.44C69.423 97.44 72.6729 94.19 72.6729 90.181C72.6729 86.1719 69.423 82.922 65.4139 82.922C61.4049 82.922 58.1549 86.1719 58.1549 90.181C58.1549 94.19 61.4049 97.44 65.4139 97.44Z" fill="#F1F3F6"/>
+<path d="M65.4139 95.959C68.605 95.959 71.1919 93.3721 71.1919 90.181C71.1919 86.9899 68.605 84.403 65.4139 84.403C62.2228 84.403 59.6359 86.9899 59.6359 90.181C59.6359 93.3721 62.2228 95.959 65.4139 95.959Z" stroke="#CCD4E5" stroke-width="2.5"/>
+<path d="M52.5922 82.7431C53.6698 80.2049 52.4857 77.2737 49.9475 76.1962C47.4093 75.1186 44.4781 76.3027 43.4005 78.8409L34.2742 100.338C33.1966 102.876 34.3807 105.807 36.9189 106.885C39.4571 107.963 42.3883 106.778 43.4659 104.24L52.5922 82.7431Z" fill="#E0E9FB"/>
+<path opacity="0.5" d="M34.4554 118.625C37.2113 118.625 39.4454 116.391 39.4454 113.635C39.4454 110.879 37.2113 108.645 34.4554 108.645C31.6994 108.645 29.4653 110.879 29.4653 113.635C29.4653 116.391 31.6994 118.625 34.4554 118.625Z" fill="#E0E9FB"/>
+</svg>
diff --git a/apps/website/src/components/icons/impl/user.svg b/apps/website/src/components/icons/impl/user.svg
new file mode 100644
index 0000000..9135b9f
--- /dev/null
+++ b/apps/website/src/components/icons/impl/user.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
+ <path d="M20 21C20 19.6044 20 18.9067 19.8278 18.3389C19.44 17.0605 18.4395 16.06 17.1611 15.6722C16.5933 15.5 15.8956 15.5 14.5 15.5H9.5C8.10444 15.5 7.40665 15.5 6.83886 15.6722C5.56045 16.06 4.56004 17.0605 4.17224 18.3389C4 18.9067 4 19.6044 4 21M16.5 7.5C16.5 9.98528 14.4853 12 12 12C9.51472 12 7.5 9.98528 7.5 7.5C7.5 5.01472 9.51472 3 12 3C14.4853 3 16.5 5.01472 16.5 7.5Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
+</svg>
diff --git a/apps/website/src/components/icons/impl/vanillahud.svg b/apps/website/src/components/icons/impl/vanillahud.svg
new file mode 100644
index 0000000..5bfb9c6
--- /dev/null
+++ b/apps/website/src/components/icons/impl/vanillahud.svg
@@ -0,0 +1,5 @@
+<svg width="128" height="128" viewBox="0 0 128 128" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M56.1332 58.7216C55.0004 58.7385 53.9197 59.2004 53.1246 60.0074C52.3295 60.8145 51.8838 61.9019 51.8838 63.0349C51.8838 64.1678 52.3295 65.2553 53.1246 66.0623C53.9197 66.8694 55.0004 67.3313 56.1332 67.3482V58.7216ZM94.9535 67.3511C96.0863 67.3342 97.167 66.8723 97.9621 66.0652C98.7572 65.2582 99.2028 64.1707 99.2028 63.0378C99.2028 61.9048 98.7572 60.8174 97.9621 60.0103C97.167 59.2033 96.0863 58.7414 94.9535 58.7245V67.3511ZM60.4498 24.215C60.4329 23.0822 59.971 22.0016 59.164 21.2065C58.3569 20.4114 57.2695 19.9657 56.1365 19.9657C55.0036 19.9657 53.9161 20.4114 53.1091 21.2065C52.302 22.0016 51.8401 23.0822 51.8232 24.215H60.4498ZM51.8203 101.855C51.8118 102.427 51.917 102.994 52.13 103.525C52.3429 104.056 52.6593 104.539 53.0606 104.947C53.462 105.354 53.9404 105.678 54.4679 105.898C54.9955 106.119 55.5617 106.233 56.1336 106.233C56.7056 106.233 57.2718 106.119 57.7993 105.898C58.3269 105.678 58.8053 105.354 59.2067 104.947C59.608 104.539 59.9244 104.056 60.1373 103.525C60.3502 102.994 60.4555 102.427 60.447 101.855H51.8203ZM56.1332 67.3511H94.9535V58.7216H56.1332V67.3511ZM51.8203 24.215V101.855H60.4498V24.215H51.8203ZM38.0175 28.5279H74.2488V19.9012H38.0175V28.5279ZM90.6397 44.9188V81.15H99.2663V44.9188H90.6397ZM74.2488 97.5409H38.0175V106.168H74.2488V97.5409ZM21.6266 81.15V44.9188H13V81.15H21.6266ZM38.0175 97.5409C34.3226 97.5409 31.8115 97.5409 29.8702 97.3783C28.6533 97.3525 27.4532 97.0883 26.3379 96.6006L22.4207 104.287C24.5352 105.293 26.8287 105.867 29.1676 105.977C31.542 106.169 34.4612 106.169 38.0223 106.169L38.0175 97.5409ZM13 81.15C13 84.7025 13 87.6265 13.1925 90.0048C13.3026 92.3436 13.8771 94.6371 14.8826 96.7517L22.567 92.8306C22.079 91.7154 21.8145 90.5153 21.7883 89.2983C21.6295 87.357 21.6266 84.845 21.6266 81.15H13ZM26.3379 96.6006C24.7147 95.7736 23.394 94.4538 22.567 92.8306L14.8807 96.7469C16.5349 99.9933 19.1743 102.633 22.4207 104.287L26.3379 96.6006ZM90.6397 81.15C90.6397 84.845 90.6397 87.356 90.477 89.2983C90.4513 90.5153 90.187 91.7153 89.6994 92.8306L97.3856 96.7469C98.3912 94.6324 98.9657 92.3388 99.0757 90C99.2682 87.6255 99.2682 84.7064 99.2682 81.1452L90.6397 81.15ZM74.2488 106.168C77.8013 106.168 80.7253 106.168 83.1035 105.975C85.4424 105.865 87.7359 105.291 89.8505 104.285L85.9293 96.6006C84.8141 97.0883 83.614 97.3525 82.3971 97.3783C80.4558 97.5371 77.9437 97.5409 74.2488 97.5409V106.168ZM89.6994 92.8306C88.8724 94.4539 87.5526 95.7736 85.9293 96.6006L89.8456 104.287C93.092 102.633 95.7315 99.9933 97.3856 96.7469L89.6994 92.8306ZM74.2488 28.5279C77.9437 28.5279 80.4548 28.5279 82.3971 28.6896C83.6141 28.7157 84.8142 28.9802 85.9293 29.4682L89.8456 21.7819C87.7313 20.7772 85.4381 20.2034 83.0997 20.0937C80.7253 19.9012 77.8061 19.9012 74.2449 19.9012L74.2488 28.5279ZM99.2663 44.9188C99.2663 41.3663 99.2663 38.4423 99.0738 36.064C98.9639 33.7252 98.3894 31.4316 97.3837 29.3171L89.6994 33.2382C90.187 34.3535 90.4513 35.5535 90.477 36.7705C90.6358 38.7118 90.6397 41.2248 90.6397 44.9188H99.2663ZM85.9293 29.4682C87.5526 30.2952 88.8723 31.615 89.6994 33.2382L97.3856 29.3219C95.7315 26.0755 93.092 23.4361 89.8456 21.7819L85.9293 29.4682ZM38.0175 19.9012C34.4631 19.9012 31.541 19.9012 29.1695 20.0937C26.8307 20.2038 24.5371 20.7783 22.4226 21.7838L26.337 29.4682C27.4522 28.9802 28.6522 28.7157 29.8692 28.6896C31.8105 28.5308 34.3236 28.5279 38.0175 28.5279V19.9012ZM21.6266 44.9188C21.6266 41.2238 21.6266 38.7127 21.7883 36.7714C21.8145 35.5544 22.079 34.3534 22.567 33.2382L14.8807 29.3219C13.8755 31.4372 13.3016 33.7314 13.1925 36.0708C13 38.4452 13 41.3644 13 44.9255L21.6266 44.9188ZM22.4207 21.7819C19.1742 23.436 16.5348 26.0755 14.8807 29.3219L22.567 33.2382C23.394 31.615 24.7137 30.2952 26.337 29.4682L22.4207 21.7819Z" fill="#DFE3EC"/>
+<path opacity="0.8" d="M79.7183 121H89.5432C96.0537 120.992 102.295 118.402 106.899 113.798C111.502 109.195 114.091 102.953 114.099 96.4425V58.7454C114.099 57.4436 113.582 56.1951 112.661 55.2745C111.741 54.354 110.492 53.8368 109.19 53.8368C107.888 53.8368 106.64 54.354 105.719 55.2745C104.799 56.1951 104.282 57.4436 104.282 58.7454V96.4425C104.282 98.3779 103.901 100.294 103.16 102.083C102.419 103.871 101.334 105.495 99.9652 106.864C98.5965 108.232 96.9716 109.317 95.1834 110.058C93.3952 110.798 91.4786 111.179 89.5432 111.178H79.7183C78.4158 111.178 77.1667 111.695 76.2457 112.616C75.3247 113.537 74.8073 114.787 74.8073 116.089C74.8073 117.391 75.3247 118.641 76.2457 119.562C77.1667 120.483 78.4158 121 79.7183 121Z" fill="#DFE3EC"/>
+<path opacity="0.7" d="M82.7828 7H30.0067C27.7396 7 25.9017 8.83784 25.9017 11.1049C25.9017 13.372 27.7396 15.2099 30.0067 15.2099H82.7828C85.0499 15.2099 86.8878 13.372 86.8878 11.1049C86.8878 8.83784 85.0499 7 82.7828 7Z" fill="#DFE3EC"/>
+</svg>
diff --git a/apps/website/src/components/icons/impl/youtube.svg b/apps/website/src/components/icons/impl/youtube.svg
new file mode 100644
index 0000000..827dc58
--- /dev/null
+++ b/apps/website/src/components/icons/impl/youtube.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor" viewBox="0 0 16 16">
+ <path d="M8.051 1.999h.089c.822.003 4.987.033 6.11.335a2.01 2.01 0 0 1 1.415 1.42c.101.38.172.883.22 1.402l.01.104.022.26.008.104c.065.914.073 1.77.074 1.957v.075c-.001.194-.01 1.108-.082 2.06l-.008.105-.009.104c-.05.572-.124 1.14-.235 1.558a2.007 2.007 0 0 1-1.415 1.42c-1.16.312-5.569.334-6.18.335h-.142c-.309 0-1.587-.006-2.927-.052l-.17-.006-.087-.004-.171-.007-.171-.007c-1.11-.049-2.167-.128-2.654-.26a2.007 2.007 0 0 1-1.415-1.419c-.111-.417-.185-.986-.235-1.558L.09 9.82l-.008-.104A31.4 31.4 0 0 1 0 7.68v-.123c.002-.215.01-.958.064-1.778l.007-.103.003-.052.008-.104.022-.26.01-.104c.048-.519.119-1.023.22-1.402a2.007 2.007 0 0 1 1.415-1.42c.487-.13 1.544-.21 2.654-.26l.17-.007.172-.006.086-.003.171-.007A99.788 99.788 0 0 1 7.858 2h.193zM6.4 5.209v4.818l4.157-2.408z"/>
+ </svg>
diff --git a/apps/website/src/components/logos/Logo.astro b/apps/website/src/components/logos/Logo.astro
index 2fd6bea..cd780ad 100644
--- a/apps/website/src/components/logos/Logo.astro
+++ b/apps/website/src/components/logos/Logo.astro
@@ -1,52 +1,57 @@
---
-import type { LogoType } from "@webtypes/Config";
-import { dirname } from "path";
-import { fileURLToPath } from "url";
-import type { HTMLAttributes } from "astro/types";
-
-export interface Props extends HTMLAttributes<"svg"> {
- logo: LogoType,
- size?: number | [number, number],
- silent?: boolean,
+import { readFile } from 'node:fs/promises';
+import { join } from 'node:path';
+import type { LogoType } from '@webtypes/Config';
+import type { HTMLAttributes } from 'astro/types';
+
+export interface Props extends HTMLAttributes<'svg'> {
+ logo: LogoType
+ size?: number | [number, number]
+ silent?: boolean
}
const {
- logo,
- silent = false,
- size = undefined,
- ...attr
+ logo,
+ size = undefined,
+ ...attr
} = Astro.props;
let svg: string | undefined;
try {
- if (logo == undefined) return;
- const dir = dirname(fileURLToPath(import.meta.url)) + "/../../../public/media";
- svg = (await import(`${dir}/${logo.replaceAll(".", "/")}.svg?raw` /* @vite-ignore */)).default;
-
- if (svg == undefined) return;
-
- if (typeof size == "number" || Array.isArray(size)) {
- // SVG main element regex
- const svgElementRegex = /<svg[^>]*>/;
-
- svg = svg.replace(svgElementRegex, (match) => {
- let newMatch = match;
- if (typeof size == "number") {
- newMatch = newMatch.replace(/width="[^"]*"/, `width="${size}"`);
- newMatch = newMatch.replace(/height="[^"]*"/, `height="${size}"`);
- } else if (Array.isArray(size)) {
- newMatch = newMatch.replace(/width="[^"]*"/, `width="${size[0]}"`);
- newMatch = newMatch.replace(/height="[^"]*"/, `height="${size[1]}"`);
- }
- return newMatch;
- });
- }
-
- svg = svg.replace(/<svg/, `<svg ${Object.entries(attr).map(([key, value]) => `${key}="${value}"`).join(" ")}`);
-} catch (err) {
-
+ if (logo === '' || logo === undefined)
+ return;
+
+ const dir = new URL(join('..', '..', '..', 'public', 'media'), import.meta.url).pathname;
+ svg = (await readFile(`${dir}/${logo.replaceAll('.', '/')}.svg`)).toString();
+
+ if (svg === undefined)
+ return;
+
+ if (typeof size == 'number' || Array.isArray(size)) {
+ // SVG main element regex
+ const svgElementRegex = /<svg[^>]*>/;
+
+ svg = svg.replace(svgElementRegex, (match) => {
+ let newMatch = match;
+ if (typeof size == 'number') {
+ newMatch = newMatch.replace(/width="[^"]*"/, `width="${size}"`);
+ newMatch = newMatch.replace(/height="[^"]*"/, `height="${size}"`);
+ }
+ else if (Array.isArray(size)) {
+ newMatch = newMatch.replace(/width="[^"]*"/, `width="${size[0]}"`);
+ newMatch = newMatch.replace(/height="[^"]*"/, `height="${size[1]}"`);
+ }
+ return newMatch;
+ });
+ }
+
+ svg = svg.replace(/<svg/, `<svg ${Object.entries(attr).map(([key, value]) => `${key}="${value}"`).join(' ')}`);
+}
+catch (err) {
+ console.error(`Error occurred while loading SVG. Logo name is ${logo}.`);
+ console.error(err);
}
---
-<Fragment set:html={svg} />
+<Fragment set:html={svg}/>
diff --git a/apps/website/src/components/page/branding/BrandingImage.astro b/apps/website/src/components/page/branding/BrandingImage.astro
new file mode 100644
index 0000000..e112691
--- /dev/null
+++ b/apps/website/src/components/page/branding/BrandingImage.astro
@@ -0,0 +1,33 @@
+---
+interface Props {
+ type: 'badges' | 'logos' | 'mods'
+ name: string
+ nameFormatted?: string
+ altText?: string
+ extensions?: ('png' | 'svg')[]
+ maxWidth?: number
+ background?: string
+}
+
+const {
+ name,
+ type,
+ altText,
+ nameFormatted,
+ background = 'white',
+ maxWidth = 300,
+ extensions = ['png', 'svg'],
+} = Astro.props;
+
+const path = `/media/branding/${type}/${name}`;
+---
+
+<div class={`relative rounded-md bg-${background} border border-1 border-gray-400 flex flex-col justify-center items-center p-8`}>
+ <div class="absolute top-0 right-0 flex flex-row gap-x-2">
+ {extensions.map(ext => (
+ <a target="_blank" class="text-xs px-0.5 hover:underline" href={`${path}.${ext}`}>.{ext.toUpperCase()}</a>
+ ))}
+ </div>
+ <img style={`max-width: ${maxWidth}px;`} src={`${path}.svg`} alt={altText}>
+ {nameFormatted && <span class="absolute bottom-0 left-1/2 -translate-x-1/2 opacity-50 text-xxs">{nameFormatted}</span>}
+</div>
diff --git a/apps/website/src/components/shared/BaseHead.astro b/apps/website/src/components/shared/BaseHead.astro
new file mode 100644
index 0000000..ddb94e3
--- /dev/null
+++ b/apps/website/src/components/shared/BaseHead.astro
@@ -0,0 +1,15 @@
+---
+import smartypants from 'smartypants';
+import SEO from './SEO.astro';
+
+export type Props = {
+ siteName: string
+ title?: string
+ description: string
+ image: { src: string, alt: string }
+ canonicalURL?: URL | null
+ pageType?: 'website' | 'article'
+};
+
+const twitterHandle = 'polyfrost';
+---
diff --git a/apps/website/src/components/shared/SEO.astro b/apps/website/src/components/shared/SEO.astro
new file mode 100644
index 0000000..6169185
--- /dev/null
+++ b/apps/website/src/components/shared/SEO.astro
@@ -0,0 +1,89 @@
+---
+import smartypants from 'smartypants';
+
+type SEOMetadata = {
+ name?: string
+ title: string
+ description: string
+ image?: { src: string, alt: string }
+ canonicalURL?: URL | null
+ locale?: string
+};
+
+type OpenGraph = Partial<SEOMetadata> & {
+ type?: string
+};
+
+type Twitter = Partial<SEOMetadata> & {
+ handle?: string
+ card?: 'summary' | 'summary_large_image'
+};
+
+export type Props = SEOMetadata & {
+ og?: OpenGraph
+ twitter?: Twitter
+};
+
+const {
+ name,
+ description,
+ image,
+ locale = 'en',
+ canonicalURL = new URL(Astro.url.pathname, Astro.site),
+ og: _og = {},
+ twitter: _twitter = {},
+} = Astro.props;
+
+const title = [Astro.props.title, name].filter(Boolean).join(' | ');
+const og: OpenGraph = { name, title, description, canonicalURL, image, locale, type: 'website', ..._og };
+const twitter: Twitter = { name, title, description, canonicalURL, image, locale, card: 'summary_large_image', ..._twitter };
+const ensureSlash = (url: string | URL) => `${url.toString().replace(/\/$/, '')}/`;
+---
+
+<!-- Global Metadata -->
+<meta charset="utf-8" />
+<meta name="generator" content={Astro.generator} />
+<meta name="viewport" content="width=device-width" />
+<meta name="theme-color" content="#d2e1f9" />
+<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
+<link rel="mask-icon" href="/favicon.svg" color="#d2e1f9" />
+<link rel="sitemap" href="/sitemap-index.xml" />
+<link rel="alternate" type="application/rss+xml" href="/rss.xml" title="RSS" />
+
+<title set:html={smartypants(title, 1)} />
+
+<!-- Page Metadata -->
+<meta name="generator" content={Astro.generator} />
+{canonicalURL && <link rel="canonical" href={ensureSlash(canonicalURL)} />}
+<title>{title}</title>
+<meta name="description" content={description} />
+
+<!-- OpenGraph Tags -->
+<meta property="og:title" content={og.title} />
+<meta property="og:type" content={og.type} />
+{og.canonicalURL && <meta property="og:url" content={ensureSlash(og.canonicalURL)} />}
+<meta property="og:locale" content={og.locale} />
+<meta property="og:description" content={og.description} />
+<meta property="og:site_name" content={og.name} />
+{
+ og.image && (
+ <>
+ <meta property="og:image" content={og.image.src} />
+ <meta property="og:image:alt" content={og.image.alt} />
+ </>
+ )
+}
+
+<!-- Twitter Tags -->
+{twitter.card && <meta name="twitter:card" content={twitter.card} />}
+{twitter.handle && <meta name="twitter:site" content={twitter.handle} />}
+<meta name="twitter:title" content={twitter.title} />
+<meta name="twitter:description" content={twitter.description} />
+{
+ twitter.image && (
+ <>
+ <meta name="twitter:image" content={twitter.image.src} />
+ <meta name="twitter:image:alt" content={twitter.image.alt} />
+ </>
+ )
+}
diff --git a/apps/website/src/content/blog/first.md b/apps/website/src/content/blog/first.md
new file mode 100644
index 0000000..3066715
--- /dev/null
+++ b/apps/website/src/content/blog/first.md
@@ -0,0 +1,16 @@
+---
+title: 'First post'
+description: 'Lorem ipsum dolor sit amet'
+pubDate: 'Jul 08 2022'
+heroImage: '/blog-placeholder-3.jpg'
+---
+
+Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Vitae ultricies leo integer malesuada nunc vel risus commodo viverra. Adipiscing enim eu turpis egestas pretium. Euismod elementum nisi quis eleifend quam adipiscing. In hac habitasse platea dictumst vestibulum. Sagittis purus sit amet volutpat. Netus et malesuada fames ac turpis egestas. Eget magna fermentum iaculis eu non diam phasellus vestibulum lorem. Varius sit amet mattis vulputate enim. Habitasse platea dictumst quisque sagittis. Integer quis auctor elit sed vulputate mi. Dictumst quisque sagittis purus sit amet.
+
+Morbi tristique senectus et netus. Id semper risus in hendrerit gravida rutrum quisque non tellus. Habitasse platea dictumst quisque sagittis purus sit amet. Tellus molestie nunc non blandit massa. Cursus vitae congue mauris rhoncus. Accumsan tortor posuere ac ut. Fringilla urna porttitor rhoncus dolor. Elit ullamcorper dignissim cras tincidunt lobortis. In cursus turpis massa tincidunt dui ut ornare lectus. Integer feugiat scelerisque varius morbi enim nunc. Bibendum neque egestas congue quisque egestas diam. Cras ornare arcu dui vivamus arcu felis bibendum. Dignissim suspendisse in est ante in nibh mauris. Sed tempus urna et pharetra pharetra massa massa ultricies mi.
+
+Mollis nunc sed id semper risus in. Convallis a cras semper auctor neque. Diam sit amet nisl suscipit. Lacus viverra vitae congue eu consequat ac felis donec. Egestas integer eget aliquet nibh praesent tristique magna sit amet. Eget magna fermentum iaculis eu non diam. In vitae turpis massa sed elementum. Tristique et egestas quis ipsum suspendisse ultrices. Eget lorem dolor sed viverra ipsum. Vel turpis nunc eget lorem dolor sed viverra. Posuere ac ut consequat semper viverra nam. Laoreet suspendisse interdum consectetur libero id faucibus. Diam phasellus vestibulum lorem sed risus ultricies tristique. Rhoncus dolor purus non enim praesent elementum facilisis. Ultrices tincidunt arcu non sodales neque. Tempus egestas sed sed risus pretium quam vulputate. Viverra suspendisse potenti nullam ac tortor vitae purus faucibus ornare. Fringilla urna porttitor rhoncus dolor purus non. Amet dictum sit amet justo donec enim.
+
+Mattis ullamcorper velit sed ullamcorper morbi tincidunt. Tortor posuere ac ut consequat semper viverra. Tellus mauris a diam maecenas sed enim ut sem viverra. Venenatis urna cursus eget nunc scelerisque viverra mauris in. Arcu ac tortor dignissim convallis aenean et tortor at. Curabitur gravida arcu ac tortor dignissim convallis aenean et tortor. Egestas tellus rutrum tellus pellentesque eu. Fusce ut placerat orci nulla pellentesque dignissim enim sit amet. Ut enim blandit volutpat maecenas volutpat blandit aliquam etiam. Id donec ultrices tincidunt arcu. Id cursus metus aliquam eleifend mi.
+
+Tempus quam pellentesque nec nam aliquam sem. Risus at ultrices mi tempus imperdiet. Id porta nibh venenatis cras sed felis eget velit. Ipsum a arcu cursus vitae. Facilisis magna etiam tempor orci eu lobortis elementum. Tincidunt dui ut ornare lectus sit. Quisque non tellus orci ac. Blandit libero volutpat sed cras. Nec tincidunt praesent semper feugiat nibh sed pulvinar proin gravida. Egestas integer eget aliquet nibh praesent tristique magna.
diff --git a/apps/website/src/content/config.ts b/apps/website/src/content/config.ts
new file mode 100644
index 0000000..8d68c0e
--- /dev/null
+++ b/apps/website/src/content/config.ts
@@ -0,0 +1,13 @@
+import { defineCollection, z } from 'astro:content';
+
+const blog = defineCollection({
+ schema: z.object({
+ title: z.string(),
+ description: z.string(),
+ pubDate: z.coerce.date(),
+ updatedDate: z.coerce.date().optional(),
+ heroImage: z.string().optional(),
+ }),
+});
+
+export const collections = { blog };
diff --git a/apps/website/src/env.d.ts b/apps/website/src/env.d.ts
index f964fe0..acef35f 100644
--- a/apps/website/src/env.d.ts
+++ b/apps/website/src/env.d.ts
@@ -1 +1,2 @@
+/// <reference path="../.astro/types.d.ts" />
/// <reference types="astro/client" />
diff --git a/apps/website/src/layouts/BlogPost.astro b/apps/website/src/layouts/BlogPost.astro
new file mode 100644
index 0000000..188aae1
--- /dev/null
+++ b/apps/website/src/layouts/BlogPost.astro
@@ -0,0 +1,35 @@
+---
+import FormattedDate from '@components/base/FormattedDate.astro';
+import '@styles/blog.css';
+import type { CollectionEntry } from 'astro:content';
+import Layout from './Layout.astro';
+
+type Props = CollectionEntry<'blog'>['data'];
+
+const { title, description, pubDate, updatedDate, heroImage } = Astro.props;
+---
+
+<Layout title={title} description={description}>
+ <article>
+ <div class="hero-image">
+ {heroImage && <img width={1020} height={510} src={heroImage} alt="Hero Image"/>}
+ </div>
+ <div class="prose">
+ <div class="title">
+ <div class="date">
+ <FormattedDate date={pubDate}/>
+ {
+ updatedDate && (
+ <div class="last-updated-on">
+ Last updated on <FormattedDate date={updatedDate}/>
+ </div>
+ )
+ }
+ </div>
+ <h1>{title}</h1>
+ <hr/>
+ </div>
+ <slot/>
+ </div>
+ </article>
+</Layout>
diff --git a/apps/website/src/layouts/Layout.astro b/apps/website/src/layouts/Layout.astro
index 298071d..f157e73 100644
--- a/apps/website/src/layouts/Layout.astro
+++ b/apps/website/src/layouts/Layout.astro
@@ -1,41 +1,47 @@
---
-import "../styles/global.css";
-import Navbar from "../components/base/Navbar.astro";
-import Favicon from "/media/polyfrost/minimal_bg.svg?url";
-import Footer from "@components/base/Footer.astro";
+import Footer from '@components/base/Footer.astro';
+import Favicon from '/media/polyfrost/minimal_bg.svg?url';
+import Navbar from '../components/base/navbar/Navbar.astro';
+import '../styles/global.css';
interface Props {
- title?: string;
- favicon?: string;
+ title?: string
+ description?: string
+ favicon?: string
}
const {
- title = 'Polyfrost',
- favicon = Favicon
+ title = 'Polyfrost',
+ description = 'Official website for Polyfrost.',
+ favicon = Favicon,
} = Astro.props;
---
<!doctype html>
<html lang="en">
<head>
- <meta charset="UTF-8" />
- <meta name="description" content="Official website for Polyfrost." />
- <meta name="viewport" content="width=device-width" />
- <link rel="icon" type="image/svg+xml" href={favicon} />
- <meta name="generator" content={Astro.generator} />
+ <meta charset="UTF-8"/>
+ <meta name="description" content={description}/>
+ <meta name="viewport" content="width=device-width"/>
+ <link rel="icon" type="image/svg+xml" href={favicon}/>
+ <meta name="generator" content={Astro.generator}/>
- <link rel="preconnect" href="https://fonts.googleapis.com">
- <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
- <link href="https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap" rel="stylesheet">
+ <link rel="preconnect" href="https://fonts.googleapis.com"/>
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin/>
+ <link href="https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap" rel="stylesheet"/>
+ <link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:ital@0;1&display=swap" rel="stylesheet"/>
<title>{title}</title>
</head>
- <body class="bg-gray-50">
- <Navbar />
- <main class="min-h-screen h-auto">
- <slot />
+ <body class="bg-gray-50 overflow-x-hidden">
+
+ <Navbar />
+
+ <main class="min-h-screen h-auto flex flex-col gap-40" >
+ <slot/>
+ <Footer />
</main>
- <Footer />
+
</body>
</html>
diff --git a/apps/website/src/pages/about.astro b/apps/website/src/pages/about.astro
new file mode 100644
index 0000000..035d3ae
--- /dev/null
+++ b/apps/website/src/pages/about.astro
@@ -0,0 +1,98 @@
+---
+import Button from '@components/base/Button.astro';
+import Header from '@components/base/Header.astro';
+import Paragraph from '@components/base/Paragraph.astro';
+import Section from '@components/base/Section.astro';
+import Layout from '@layouts/Layout.astro';
+
+---
+
+<Layout>
+ <Section class="flex-col justify-center items-center h-screen max-h-4/5-screen md:max-h-[600px] md:min-h-[400px]">
+ <div class="max-w-[600px] flex flex-col text-center justify-center items-center gap-y-2">
+ <Header align="center" size="xxl" class="text-navy-peony">Our journey</Header>
+ <Paragraph size="lg" class="text-blue-gray">From an aspiring team just trying to make a cool thing, to what we now call Polyfrost, we've made a lot of progress.</Paragraph>
+ </div>
+ </Section>
+
+ <div class="flex flex-col gap-y-40">
+ <Section tabindex="0" colReverse={false}>
+ <div slot="left" class="w-1/2 md:w-auto">
+ <img src="/media/about/page_media_1.svg" alt="image of a calendar">
+ </div>
+ <div slot="right">
+ <Header size="lg" class="text-navy-peony">
+ October, 2021
+ </Header>
+ <Paragraph size="sm" class="text-blue-gray max-w-[500px]">
+ We began as a small development team trying to build ambitious projects beyond us. Joining forces with W-OVERFLOW (a modding organization formerly owned by one of the current owners), Polyfrost finally had the resources to achieve our dream of a unified config for all mods.
+ </Paragraph>
+ </div>
+ </Section>
+
+ <Section tabindex="0">
+ <div slot="left">
+ <Header size="lg" class="text-navy-peony">
+ A year of development
+ </Header>
+ <Paragraph size="sm" class="text-gray-400 max-w-[500px]">
+ Our first alpha build of OneConfig released in June to a limited audience. By October of 2022, nearly a year after our first announcement, OneConfig finally became available to the whole world in open beta.
+ </Paragraph>
+ </div>
+
+ <div slot="right" class="w-1/2 md:w-auto">
+ <img src="/media/about/page_media_2.svg" alt="image of a code block" />
+ </div>
+ </Section>
+
+ <Section tabindex="0" colReverse={false}>
+ <div slot="left" class="w-1/2 md:w-auto">
+ <img src="/media/about/page_media_3.svg" alt="image indicating a celebration">
+ </div>
+ <div slot="right" class="flex flex-col gap-y-2">
+ <Header size="lg" class="text-navy-peony">
+ Hey look, OneConfig's a hit!
+ </Header>
+ <Paragraph size="sm" class="text-gray-400 max-w-[500px]">
+ In the coming months, our little baby would independently surpass 200,000 views on YouTube and our community grew by around 300%. Shortly after, our first major update releases, bringing substantial customization, new animations, design overhauls, and many bug fixes.
+ </Paragraph>
+ <div class="flex">
+ <Button style="secondary" iconLeft="oneconfig" href="/projects/oneconfig">OneConfig</Button>
+ </div>
+ </div>
+ </Section>
+
+ <Section tabindex="0">
+ <div slot="left" class="flex flex-col gap-y-2">
+ <Header size="lg" class="text-navy-peony">
+ Finally, it's ready for release
+ </Header>
+ <Paragraph size="sm" class="text-gray-400 max-w-[500px]">
+ It's been a long journey, with many bugs, hotfixes, mod incompatibilities, support tickets, list goes on. However, after two years of development, we finally announced the complete release of OneConfig. In November 2023, we released all our OneConfig mods out of beta and into the world.
+ </Paragraph>
+ <div class="flex">
+ <Button iconLeft="link-external" style="secondary" href="/mods">Discover Mods</Button>
+ </div>
+ </div>
+
+ <div slot="right" class="w-1/2 md:w-auto">
+ <img src="/media/about/page_media_4.svg" alt="oneconfig logo" />
+ </div>
+ </Section>
+
+ <Section class="mb-40 flex-col items-center justify-center text-center text-navy-peony">
+ <div class="flex flex-col gap-y-10 max-w-xl text-lg">
+ <Paragraph>
+ Since the inception of OneConfig and since the people that became Polyfrost first met, we have always been known for our attention and swift feedback to users and their suggestions. No matter what we do in the future, you will always be our top priority. And we mean it.
+ </Paragraph>
+ <Paragraph>
+ We've grown a lot from our early days back in 2021. What used to be a small team of four has become a professional team of 12 aspiring developers and designers maintaining two libraries and 10+ mods.
+ </Paragraph>
+ <Paragraph>
+ We thank everyone; from the people who are just finding us, to the people who were there in the very early days, for sticking around with us.
+ </Paragraph>
+ </div>
+ </Section>
+ </div>
+
+</Layout>
diff --git a/apps/website/src/pages/blog/[...slug].astro b/apps/website/src/pages/blog/[...slug].astro
new file mode 100644
index 0000000..abdde0a
--- /dev/null
+++ b/apps/website/src/pages/blog/[...slug].astro
@@ -0,0 +1,23 @@
+---
+// i hate u astro vscode extensi on/j
+/// <reference types="../../env.d.ts" />
+import { type CollectionEntry, getCollection } from 'astro:content';
+import BlogPost from '../../layouts/BlogPost.astro';
+
+export async function getStaticPaths() {
+ const posts = await getCollection('blog');
+ return posts.map(post => ({
+ params: { slug: post.slug },
+ props: post,
+ }));
+}
+
+type Props = CollectionEntry<'blog'>;
+
+const post = Astro.props;
+const { Content } = await post.render();
+---
+
+<BlogPost {...post.data}>
+ <Content/>
+</BlogPost>
diff --git a/apps/website/src/pages/blog/index.astro b/apps/website/src/pages/blog/index.astro
new file mode 100644
index 0000000..4bccad4
--- /dev/null
+++ b/apps/website/src/pages/blog/index.astro
@@ -0,0 +1,30 @@
+---
+/// <reference types="../../env.d.ts" />
+import { getCollection } from 'astro:content';
+import FormattedDate from '../../components/base/FormattedDate.astro';
+import Layout from '../../layouts/Layout.astro';
+
+const posts = (await getCollection('blog')).sort(
+ (a, b) => a.data.pubDate.valueOf() - b.data.pubDate.valueOf(),
+);
+---
+
+<Layout title="Polyfrost Blog" description="Recieve Polyfrost updates here">
+ <section>
+ <ul>
+ {
+ posts.map(post => (
+ <li>
+ <a href={`blog/${post.slug}/`}>
+ <img width={720} height={360} src={post.data.heroImage} alt=""/>
+ <h4 class="title">{post.data.title}</h4>
+ <p class="date">
+ <FormattedDate date={post.data.pubDate}/>
+ </p>
+ </a>
+ </li>
+ ))
+ }
+ </ul>
+ </section>
+</Layout>
diff --git a/apps/website/src/pages/branding.astro b/apps/website/src/pages/branding.astro
new file mode 100644
index 0000000..e367f3b
--- /dev/null
+++ b/apps/website/src/pages/branding.astro
@@ -0,0 +1,117 @@
+---
+import Header from '@components/base/Header.astro';
+import Paragraph from '@components/base/Paragraph.astro';
+import Section from '@components/base/Section.astro';
+import BrandingImage from '@components/page/branding/BrandingImage.astro';
+import Layout from '@layouts/Layout.astro';
+
+const mods = ['behind_you', 'chatting', 'crash_patch', 'damage_tint', 'evergreen_h_u_d', 'glint_colorizer', 'keystrokes', 'overflow_animations', 'poly_blur', 'poly_nametag', 'poly_sprint', 'poly_time', 'poly_weather', 'vanilla_h_u_d'];
+
+function formatModName(name: string): string {
+ return name.split('_').map(word => word.charAt(0).toUpperCase() + word.slice(1)).join('');
+}
+---
+
+<Layout>
+ <Section class="justify-center items-start pt-32">
+ <div class="flex flex-col justify-start items-start w-full text-navy-peony">
+ <Header>
+ Polyfrost Branding
+ </Header>
+ <Paragraph>
+ We usually don't mind people mentioning our name or using our logos - in fact, we really appreciate the free promo. All we ask is to use our provided work responsibly, and contact us first.
+ </Paragraph>
+ </div>
+ </Section>
+
+ <Section wrapperClass="bg-blue-75" class="py-12 flex-col">
+ <div class="w-full text-navy-peony text-center flex flex-col justify-center items-center">
+ <Header>
+ Our Brand
+ </Header>
+ <Paragraph class="max-w-[500px]">
+ Introducing... our brand logos in all of their glory. We just ask to not edit, distort, recolor, or reconfigure any assets below.
+ </Paragraph>
+ </div>
+
+ <div class="flex flex-col gap-y-12 mt-8">
+ <div class="flex flex-col">
+ <Header size="sm" class="text-navy-peony">
+ Our Logo, with text
+ </Header>
+ <Paragraph class="max-w-[500px] text-gray-400" size="xs">
+ Super cool.
+ </Paragraph>
+ <div class="flex flex-row justify-evenly items-center flex-wrap my-8 gap-2">
+ <BrandingImage name="logo_1" type="logos" />
+ <BrandingImage name="logo_2" type="logos" />
+ </div>
+ </div>
+ <div class="flex flex-col">
+ <Header size="sm" class="text-navy-peony">
+ Our Logo, when you don't wanna read
+ </Header>
+ <Paragraph class="max-w-[500px] text-gray-400" size="xs">
+ Even cooler.
+ </Paragraph>
+ <div class="flex flex-row justify-evenly items-center flex-wrap my-8 gap-2">
+ <BrandingImage name="logo_3" type="logos" />
+ <BrandingImage name="logo_4" type="logos" />
+ </div>
+ </div>
+ <div class="flex flex-col">
+ <Header size="sm" class="text-navy-peony">
+ OneConfig logo, with text
+ </Header>
+ <Paragraph class="max-w-[500px] text-gray-400" size="xs">
+ The one and only.
+ </Paragraph>
+ <div class="flex flex-row justify-evenly items-center flex-wrap my-8 gap-2">
+ <BrandingImage name="logo_5" type="logos" />
+ <BrandingImage name="logo_6" type="logos" />
+ </div>
+ </div>
+ <div class="flex flex-col">
+ <Header size="sm" class="text-navy-peony">
+ OneConfig logo, when you don't wanna read
+ </Header>
+ <Paragraph class="max-w-[500px] text-gray-400" size="xs">
+ The one and only.
+ </Paragraph>
+ <div class="flex flex-row justify-evenly items-center flex-wrap my-8 gap-2">
+ <BrandingImage name="logo_7" type="logos" />
+ <BrandingImage name="logo_8" type="logos" />
+ </div>
+ </div>
+ </div>
+ </Section>
+
+ <Section wrapperClass="bg-[#11171C]" class="py-12 flex-col text-blue-100 gap-y-8">
+ <div class="flex flex-col items-start justify-start">
+ <Header size="md">
+ OneConfig badges
+ </Header>
+ <Paragraph size="sm" class="text-[#78818D]">
+ When you want to show off OneConfig in your mods. Credits to Devin's Badges for the design.
+ </Paragraph>
+ <div class="my-4 flex flex-row flex-wrap gap-2 text-white">
+ {Array.from({ length: 4 }, (_, i) => (
+ <BrandingImage background="transparent" name={`badge_${i + 1}`} type="badges" />
+ ))}
+ </div>
+ </div>
+ <div class="flex flex-col items-start justify-start">
+ <Header size="md">
+ All of our mod icons
+ </Header>
+ <Paragraph size="sm" class="text-[#78818D]">
+ We have... a lot of those... (original EvergreenHUD logo by isXander)
+ </Paragraph>
+ <div class="my-4 flex flex-row flex-wrap gap-2 text-white">
+ {mods.map(mod => (
+ <BrandingImage nameFormatted={formatModName(mod)} background="transparent" name={mod} type="mods" />
+ ))}
+ </div>
+ </div>
+ </Section>
+</Layout>
diff --git a/apps/website/src/pages/contact.astro b/apps/website/src/pages/contact.astro
new file mode 100644
index 0000000..aac214d
--- /dev/null
+++ b/apps/website/src/pages/contact.astro
@@ -0,0 +1,53 @@
+---
+import Button from '@components/base/Button.astro';
+import Header from '@components/base/Header.astro';
+import Paragraph from '@components/base/Paragraph.astro';
+import Section from '@components/base/Section.astro';
+import Icon from '@components/icons/Icon.astro';
+import Layout from '@layouts/Layout.astro';
+
+---
+
+<Layout>
+
+ <Section wrapperClass="min-h-screen" class="my-40 md:my-40 xl:my-20 2xl:my-20 justify-center items-center flex-col">
+ <Header size="xl" class="text-navy-peony text-center">Feeling social? Come chat with us</Header>
+ <Paragraph class="text-blue-gray max-w-2xl text-center">
+ We primarily connect with our community with Discord, however we regularly check Github as well.
+ </Paragraph>
+ <div class="flex flex-row flex-wrap p-5 w-full justify-center items-center gap-8">
+ {/* GitHub */}
+ <div class="bg-blue-75 flex flex-col justify-start items-center p-5 gap-y-0.5 rounded-2xl">
+ <Icon icon="github" size={48} class="text-blue-gray" />
+ <Header size="md" class="text-navy-peony mt-2">GitHub</Header>
+ <!-- <div class="flex flex-row items-center justify-center gap-x-1">
+ <span class="w-1.5 h-1.5 bg-green-300 rounded-full"></span>
+ <Paragraph size="sm" class="text-blue-gray">69 commits a week</Paragraph>
+ </div> -->
+
+ <Paragraph size="sm" class="text-blue-gray max-w-48 text-center my-4">
+ We love open source, so all of our projects are OSS. Anyone is welcome to contribute new features (and bugs) to our mods.
+ </Paragraph>
+
+ <Button style="secondary" href="http://github.com/Polyfrost/" iconLeft="code" size="sm" class="w-full">Contribute today</Button>
+ </div>
+
+ {/* Discord */}
+ <div class="bg-blue-75 flex flex-col justify-start items-center p-5 gap-y-0.5 rounded-2xl">
+ <Icon icon="discord" size={48} class="text-blue-gray" />
+ <Header size="md" class="text-navy-peony mt-2">Discord</Header>
+ <!-- <div class="flex flex-row items-center justify-center gap-x-1">
+ <span class="w-1.5 h-1.5 bg-green-300 rounded-full"></span>
+ <Paragraph size="sm" class="text-blue-gray">69 commits a week</Paragraph>
+ </div> -->
+
+ <Paragraph size="sm" class="text-blue-gray max-w-48 text-center my-4">
+ Join us today! It's the easiest way to chat with other members, suggest new features, and get support with your mods.
+ </Paragraph>
+
+ <Button style="secondary" href="/discord" iconLeft="chat" size="sm" class="w-full">Chat with us</Button>
+ </div>
+ </div>
+ </Section>
+
+</Layout>
diff --git a/apps/website/src/pages/index.astro b/apps/website/src/pages/index.astro
index 87ee0eb..c078345 100644
--- a/apps/website/src/pages/index.astro
+++ b/apps/website/src/pages/index.astro
@@ -1,195 +1,156 @@
---
-import Header from "@components/base/Header.astro";
-import Layout from "../layouts/Layout.astro";
-import Logo from "@components/logos/Logo.astro";
-import Section from "@components/base/Section.astro";
-import Button from "@components/base/Button.astro";
-
-import Paragraph from "@components/base/Paragraph.astro";
-import CodeBlock from "@components/base/CodeBlock.astro";
-
+import Button from '@components/base/Button.astro';
+import Header from '@components/base/Header.astro';
+import Link from '@components/base/Link.astro';
+import Paragraph from '@components/base/Paragraph.astro';
+import Section from '@components/base/Section.astro';
+import Icon from '@components/icons/Icon.astro';
+import configConst from '@config';
+import Layout from '@layouts/Layout.astro';
---
-
<Layout>
- <Section class="flex-col justify-center items-center h-screen md:h-4/5 md:min-h-[600px]">
- <Logo size={56} logo="oneconfig.minimal" />
- <Header align="center" size="xxl" class="max-w-[600px]">Meet <b>OneConfig</b>, the library designed for <b>everyone</b>.</Header>
- <div class="flex flex-row justify-center items-center gap-2">
- <Button iconLeft="download" text="Download" />
- <Button href="/documentation" iconLeft="book-open" style="secondary" text="Documentation" />
+ <Section wrapperClass="min-h-screen" class="relative isolate px-6 lg:px-8">
+ <div class="absolute inset-x-0 -top-40 -z-10 transform-gpu overflow-hidden blur-3xl sm:-top-80 opacity-50">
+ <svg
+ class="relative left-[calc(50%-11rem)] -z-10 h-[21.1875rem] max-w-none -translate-x-1/2 rotate-[30deg] sm:left-[calc(50%-30rem)] sm:h-[42.375rem]"
+ viewBox="0 0 1155 678">
+ <path
+ fill="url(#45de2b6b-92d5-4d68-a6a0-9b9b2abad533)"
+ fill-opacity="0.3"
+ d="M317.219 518.975L203.852 678 0 438.341l317.219 80.634 204.172-286.402c1.307 132.337 45.083 346.658 209.733 145.248C936.936 126.058 882.053-94.234 1031.02 41.331c119.18 108.451 130.68 295.337 121.53 375.223L855 299l21.173 362.054-558.954-142.079z"
+ />
+ <defs>
+ <linearGradient id="45de2b6b-92d5-4d68-a6a0-9b9b2abad533" x1="1155.49" x2="-78.208" y1=".177" y2="474.645" gradientUnits="userSpaceOnUse">
+ <stop stop-color="#2463EB" />
+ <stop offset={1} stop-color="#0080B5" />
+ </linearGradient>
+ </defs>
+ </svg>
</div>
- </Section>
-
- <div class="flex flex-col gap-40">
- <Section tabindex="0">
- <div slot="left">
- <Header size="lg" class="text-navy-peony">Forge is complicated</Header>
- <Paragraph size="sm" class="text-gray-400 max-w-[500px]">Modding Minecraft has always been difficult, particularly with their configuration. Remembering all of the keybinds, commands; it just isn't intuitive.</Paragraph>
+ <div class="mx-auto max-w-3xl py-36 lg:py-48">
+ <div class="mt-4 mb-8 flex md:justify-center">
+ <div class="flex flex-row justify-center items-center font-medium relative rounded-full py-1 px-3 text-sm text-blue-450 hover:text-blue-600 border border-1 border-gray-800/20 hover:border-blue-600">
+ Introducing OneConfig
+ <Link href="/projects/oneconfig" class="transition-none">
+ <span class="absolute inset-0" aria-hidden="true"></span>
+ <Icon icon="link-external" size={18} class="ml-1"></Icon>
+ </Link>
+ </div>
</div>
- <div slot="right" class="w-3/4 md:w-auto">
- <svg class="w-full h-full" width="270" height="195" viewBox="0 0 270 195" fill="none" xmlns="http://www.w3.org/2000/svg">
- <rect x="42" width="208" height="48" rx="3" fill="black" fill-opacity="0.55"/>
- <path d="M62.4492 31V29H64.4492V31H62.4492ZM64.4492 29V27V25H66.4492V27V29H64.4492ZM66.4492 25V23H68.4492V25H66.4492ZM68.4492 23V21V19H70.4492V21V23H68.4492ZM70.4492 19V17H72.4492V19H70.4492ZM83.457 29H85.457V31H83.457H81.457H79.457H77.457V29H79.457H81.457H83.457ZM77.457 29H75.457V27V25V23H77.457V25H79.457H81.457H83.457V23H85.457V25V27H83.457H81.457H79.457H77.457V29ZM83.457 23H81.457H79.457H77.457V21H79.457H81.457H83.457V23ZM92.4648 31V29H94.4648V31H92.4648ZM94.4648 29V27H96.4648V29H94.4648ZM92.4648 29H90.4648V27H92.4648V29ZM96.4648 27V25V23V21H98.4648V23V25V27H96.4648ZM90.4648 27H88.4648V25V23V21H90.4648V23V25V27ZM109.473 29H111.473V31H109.473H107.473H105.473H103.473V29H105.473H107.473H109.473ZM103.473 29H101.473V27V25V23H103.473V25H105.473H107.473H109.473V23H111.473V25V27H109.473H107.473H105.473H103.473V29ZM109.473 23H107.473H105.473H103.473V21H105.473H107.473H109.473V23ZM114.48 31V29V27V25V23V21H116.48V23H118.48V25H116.48V27V29V31H114.48ZM122.48 25V23H124.48V25H122.48ZM122.48 23H120.48H118.48V21H120.48H122.48V23ZM133.488 31H135.488V33H133.488H131.488H129.488H127.488V31H129.488H131.488H133.488ZM135.488 31V29H133.488H131.488H129.488V27H127.488V25V23H129.488V21H131.488H133.488H135.488H137.488V23V25V27V29V31H135.488ZM133.488 27H135.488V25V23H133.488H131.488H129.488V25V27H131.488H133.488ZM140.496 31V29V27V25V23V21H142.496V23H144.496V25H142.496V27V29V31H140.496ZM148.496 25V23H150.496V25H148.496ZM148.496 23H146.496H144.496V21H146.496H148.496V23ZM161.504 29H163.504V31H161.504H159.504H157.504H155.504V29H157.504H159.504H161.504ZM155.504 29H153.504V27V25V23H155.504V25H157.504H159.504H161.504V23H163.504V25V27H161.504H159.504H157.504H155.504V29ZM161.504 23H159.504H157.504H155.504V21H157.504H159.504H161.504V23ZM174.512 29H176.512V31H174.512H172.512H170.512H168.512V29H170.512H172.512H174.512ZM168.512 29H166.512V27V25V23H168.512V25H170.512H172.512H174.512V23H176.512V25V27H174.512H172.512H170.512H168.512V29ZM174.512 23H172.512H170.512H168.512V21H170.512H172.512H174.512V23ZM187.52 31V29V27V25V23H189.52V25V27V29V31H187.52ZM179.52 31V29V27V25V23V21H181.52H183.52H185.52H187.52V23H185.52H183.52H181.52V25V27V29V31H179.52ZM200.527 31V29V27V25V23H202.527V25V27V29V31H200.527ZM192.527 31V29V27V25V23V21V19V17H194.527V19V21V23H196.527V25H194.527V27V29V31H192.527ZM200.527 23H198.527H196.527V21H198.527H200.527V23ZM213.535 31H211.535H209.535H207.535V29H209.535H211.535H213.535V27V25V23V21H215.535V23V25V27V29V31H213.535ZM207.535 29H205.535V27V25V23V21H207.535V23V25V27V29ZM226.543 31H224.543H222.543H220.543V29H222.543H224.543H226.543V27V25H224.543V23H226.543V21V19V17H228.543V19V21V23V25V27V29V31H226.543ZM220.543 29H218.543V27V25V23H220.543V25V27V29ZM224.543 23H222.543H220.543V21H222.543H224.543V23Z" fill="white"/>
- <rect x="217" y="74" width="53" height="48" rx="3" fill="black" fill-opacity="0.55"/>
- <path d="M232.996 103H234.996V105H232.996H230.996H228.996V103V101V99V97V95V93V91H230.996H232.996H234.996V93H232.996H230.996V95V97V99V101V103H232.996ZM245.996 105V103V101V99H247.996V101V103V105H245.996ZM237.996 105V103V101V99V97V95V93V91H239.996V93V95H241.996H243.996V97H245.996V99H243.996V97H241.996H239.996V99V101V103V105H237.996ZM243.996 95V93H245.996V95H243.996ZM245.996 93V91H247.996V93H245.996ZM255.004 105H253.004H251.004V103H253.004H255.004V101V99V97V95V93H253.004H251.004V91H253.004H255.004H257.004V93V95V97V99V101V103V105H255.004Z" fill="white"/>
- <rect x="145" y="148" width="73" height="47" rx="3" fill="black" fill-opacity="0.55"/>
- <path d="M164.484 179V177V175V173V171V169H162.484V171H160.484V169H162.484V167H164.484V165H166.484V167V169V171V173V175V177V179H164.484ZM156.484 179V177V175V173V171V169V167V165H158.484V167H160.484V169H158.484V171V173V175V177V179H156.484ZM175.492 177H177.492V179H175.492H173.492H171.492V177H173.492H175.492ZM177.492 177V175V173V171H179.492V173V175V177H177.492ZM171.492 177H169.492V175V173V171H171.492V173V175V177ZM177.492 171H175.492H173.492H171.492V169H173.492H175.492H177.492V171ZM190.5 179H188.5H186.5H184.5V177H186.5H188.5H190.5V175V173H188.5V171H190.5V169V167V165H192.5V167V169V171V173V175V177V179H190.5ZM184.5 177H182.5V175V173V171H184.5V173V175V177ZM188.5 171H186.5H184.5V169H186.5H188.5V171ZM201.508 177H203.508V179H201.508H199.508H197.508H195.508V177H197.508H199.508H201.508ZM203.508 177V175H205.508V177H203.508ZM203.508 175H201.508H199.508H197.508V173H199.508H201.508H203.508V175ZM197.508 173H195.508V171H197.508V173ZM203.508 169H205.508V171H203.508H201.508H199.508H197.508V169H199.508H201.508H203.508Z" fill="white"/>
- <rect y="81" width="141" height="48" rx="3" fill="black" fill-opacity="0.55"/>
- <path d="M20.9805 112V110H22.9805V112H20.9805ZM22.9805 110V108V106H24.9805V108V110H22.9805ZM24.9805 106V104H26.9805V106H24.9805ZM26.9805 104V102V100H28.9805V102V104H26.9805ZM28.9805 100V98H30.9805V100H28.9805ZM41.9883 106V104H43.9883V106H41.9883ZM39.9883 110H41.9883V112H39.9883H37.9883H35.9883V110H37.9883H39.9883ZM41.9883 110V108H43.9883V110H41.9883ZM35.9883 110H33.9883V108V106V104H35.9883V106V108V110ZM41.9883 104H39.9883H37.9883H35.9883V102H37.9883H39.9883H41.9883V104ZM54.9961 112V110V108V106V104H56.9961V106V108V110V112H54.9961ZM46.9961 112V110V108V106V104V102V100V98H48.9961V100V102V104H50.9961V106H48.9961V108V110V112H46.9961ZM54.9961 104H52.9961H50.9961V102H52.9961H54.9961V104ZM68.0039 112H66.0039H64.0039H62.0039V110H60.0039V108H62.0039V106H64.0039H66.0039H68.0039V104H70.0039V106V108V110V112H68.0039ZM66.0039 110H68.0039V108H66.0039H64.0039H62.0039V110H64.0039H66.0039ZM68.0039 104H66.0039H64.0039H62.0039V102H64.0039H66.0039H68.0039V104ZM77.0117 112V110H79.0117V112H77.0117ZM77.0117 110H75.0117V108V106V104H73.0117V102H75.0117V100V98H77.0117V100V102H79.0117V104H77.0117V106V108V110ZM86.0117 112V110H88.0117V112H86.0117ZM86.0117 110H84.0117V108V106V104H82.0117V102H84.0117V100V98H86.0117V100V102H88.0117V104H86.0117V106V108V110ZM91.0117 112V110V108V106V104V102H93.0117V104V106V108V110V112H91.0117ZM91.0117 100V98H93.0117V100H91.0117ZM104.004 112V110V108V106V104H106.004V106V108V110V112H104.004ZM96.0039 112V110V108V106V104V102H98.0039H100.004H102.004H104.004V104H102.004H100.004H98.0039V106V108V110V112H96.0039ZM115.012 112H117.012V114H115.012H113.012H111.012H109.012V112H111.012H113.012H115.012ZM117.012 112V110H115.012H113.012H111.012V108H109.012V106V104H111.012V102H113.012H115.012H117.012H119.012V104V106V108V110V112H117.012ZM115.012 108H117.012V106V104H115.012H113.012H111.012V106V108H113.012H115.012Z" fill="white"/>
- </svg>
+ <div class="text-left md:text-center">
+ <Header size="xxl" class="tracking-tight text-navy-peony max-sm:!text-header">
+ Passionate creators redefining the modding community
+ </Header>
+ <Paragraph class="mt-6 text-lg leading-8 text-navy-peony">
+ With a dedicated team of developers and a passionate community of players, Polyfrost continues to push the boundaries of what's possible in Minecraft modding.
+ </Paragraph>
+ <div class="mt-7 flex items-center justify-start md:justify-center gap-x-6">
+ <Button style="secondary" href="/about" iconLeft="book-open">About us</Button>
+ <Button style="secondary" href="/contact" iconLeft="chat">Socials</Button>
+ </div>
</div>
- </Section>
-
- <Section tabindex="0" colReverse={false}>
- <div slot="left" class="w-1/2 md:w-auto">
- <svg class="w-full h-full" width="157" height="140" viewBox="0 0 257 240" fill="none" xmlns="http://www.w3.org/2000/svg">
- <path d="M158.702 238.846H97.5448C91.7442 238.846 85.9689 238.08 80.3793 236.568C74.8802 235.081 69.5885 232.881 64.6511 230.029C59.7136 227.178 55.1637 223.693 51.1276 219.673C47.025 215.587 43.4751 210.968 40.5764 205.943L9.95514 152.866C7.05923 147.847 4.83842 142.466 3.35447 136.875C1.89454 131.374 1.1543 125.696 1.1543 120C1.1543 114.303 1.89454 108.626 3.35447 103.125C4.83842 97.5334 7.05923 92.1532 9.95514 87.1336L40.5765 34.0567C43.4751 29.0323 47.0251 24.4128 51.1276 20.3265C55.1637 16.3064 59.7137 12.8221 64.6511 9.97049C69.5885 7.11881 74.8802 4.91888 80.3793 3.43182C85.9689 1.92024 91.7443 1.15381 97.5448 1.15381H158.702C164.502 1.15381 170.277 1.92024 175.867 3.43182C181.366 4.91888 186.658 7.11881 191.595 9.97049C196.533 12.8222 201.083 16.3064 205.119 20.3265C209.221 24.4128 212.771 29.0323 215.67 34.0567L246.291 87.1336C249.187 92.1532 251.408 97.5334 252.892 103.125C254.352 108.626 255.092 114.303 255.092 120C255.092 125.696 254.352 131.374 252.892 136.875C251.408 142.466 249.187 147.847 246.291 152.866L215.67 205.943C212.771 210.968 209.221 215.587 205.119 219.673C201.083 223.693 196.533 227.178 191.595 230.029C186.658 232.881 181.366 235.081 175.867 236.568C170.278 238.08 164.502 238.846 158.702 238.846Z" fill="#F3F8FF"/>
- <path d="M97.5444 2.30769C91.8455 2.30769 86.1716 3.06065 80.6801 4.54566C75.2775 6.00668 70.0786 8.16801 65.2277 10.9697C60.3769 13.7714 55.9068 17.1945 51.9415 21.1441C47.9109 25.1586 44.4234 29.697 41.5755 34.6333L10.9542 87.7102C8.10903 92.6419 5.92719 97.9277 4.46932 103.421C3.03497 108.825 2.30771 114.403 2.30771 120C2.30771 125.597 3.03497 131.175 4.46932 136.579C5.92719 142.072 8.10903 147.358 10.9542 152.29L41.5755 205.367C44.4233 210.303 47.9109 214.841 51.9414 218.856C55.9067 222.805 60.3769 226.229 65.2277 229.03C70.0786 231.832 75.2775 233.993 80.6801 235.454C86.1715 236.939 91.8455 237.692 97.5444 237.692H158.701C164.4 237.692 170.074 236.939 175.566 235.454C180.968 233.993 186.167 231.832 191.018 229.03C195.869 226.229 200.339 222.805 204.304 218.856C208.335 214.841 211.822 210.303 214.67 205.367L245.291 152.29C248.137 147.358 250.318 142.072 251.776 136.579C253.211 131.175 253.938 125.597 253.938 120C253.938 114.403 253.211 108.825 251.776 103.421C250.318 97.9277 248.137 92.6419 245.291 87.7102L214.67 34.6333C211.822 29.697 208.335 25.1586 204.304 21.1441C200.339 17.1945 195.869 13.7714 191.018 10.9697C186.167 8.16801 180.968 6.00668 175.566 4.54566C170.074 3.06065 164.4 2.30769 158.701 2.30769H97.5444ZM97.5444 0H158.701C182.618 0 204.717 12.7636 216.669 33.4801L247.29 86.557C259.231 107.254 259.231 132.746 247.29 153.443L216.669 206.52C204.717 227.236 182.618 240 158.701 240H97.5444C73.6274 240 51.5284 227.236 39.5766 206.52L8.95528 153.443C-2.98509 132.746 -2.98509 107.254 8.95528 86.557L39.5766 33.4801C51.5284 12.7636 73.6274 0 97.5444 0Z" fill="white"/>
- <path d="M164.75 101.226V93.7499C164.75 73.4536 148.297 57 128 57C107.703 57 91.25 73.4536 91.25 93.7499V101.226C81.6952 105.396 75.5138 114.825 75.5 125.25V156.75C75.5172 171.24 87.2596 182.983 101.75 183H154.25C168.74 182.983 180.482 171.24 180.5 156.75V125.25C180.486 114.825 174.305 105.396 164.75 101.226ZM133.25 146.25C133.25 149.15 130.899 151.5 128 151.5C125.1 151.5 122.75 149.15 122.75 146.25V135.75C122.75 132.851 125.1 130.5 128 130.5C130.899 130.5 133.25 132.851 133.25 135.75V146.25ZM154.25 99.0001H101.75V93.7502C101.75 79.2528 113.502 67.5001 128 67.5001C142.498 67.5001 154.25 79.2525 154.25 93.7502V99.0001Z" fill="url(#paint0_linear_14_112)"/>
- <defs>
- <linearGradient id="paint0_linear_14_112" x1="78.829" y1="105.018" x2="172.945" y2="184.537" gradientUnits="userSpaceOnUse">
- <stop stop-color="#1F6AED"/>
- <stop offset="1" stop-color="#1051C2"/>
+ </div>
+ <div class="absolute inset-x-0 top-[calc(100%-13rem)] -z-10 transform-gpu overflow-hidden blur-3xl sm:top-[calc(100%-35rem)] opacity-50">
+ <svg
+ class="relative left-[calc(50%+3rem)] h-[21.1875rem] max-w-none -translate-x-1/2 sm:left-[calc(50%+36rem)] sm:h-[42.375rem]"
+ viewBox="0 0 1155 678">
+ <path
+ fill="url(#ecb5b0c9-546c-4772-8c71-4d3f06d544bc)"
+ fill-opacity=".3"
+ d="M317.219 518.975L203.852 678 0 438.341l317.219 80.634 204.172-286.402c1.307 132.337 45.083 346.658 209.733 145.248C936.936 126.058 882.053-94.234 1031.02 41.331c119.18 108.451 130.68 295.337 121.53 375.223L855 299l21.173 362.054-558.954-142.079z"
+ />
+ <defs>
+ <linearGradient id="ecb5b0c9-546c-4772-8c71-4d3f06d544bc" x1="1155.49" x2="-78.208" y1=".177" y2="474.645" gradientUnits="userSpaceOnUse">
+ <stop stop-color="#2463EB" />
+ <stop offset={1} stop-color="#0080B5" />
</linearGradient>
- </defs>
- </svg>
- </div>
-
- <div slot="right">
- <Header size="lg" class="text-navy-peony">Clients are locked-down</Header>
- <Paragraph size="sm" class="text-gray-400 max-w-[500px]">While they improve usability, they're slow to adopt new mods absent from the community and force unwanted features onto users to profit off of them.</Paragraph>
+ </defs>
+ </svg>
+ </div>
+ </Section>
+ <Section wFull maxWidth="1024px" class="mt-0 sm:-mt-52 max-sm:!px-0 !px-5 items-center justify-center">
+ <div class="flex flex-col justify-center items-center py-12 px-0 sm:py-12">
+ <div class="flex flex-wrap flex-col-reverse md:flex-row justify-center lg:justify-normal lg:flex-nowrap relative isolate overflow-hidden bg-blue-75 py-6 md:shadow sm:rounded-3xl px-6 gap-6 lg:gap-20 lg:px-8 lg:py-0 z-50 md:ring-gray-400/50 md:ring-1">
+ <div class="flex flex-col justify-center items-center lg:justify-start lg:items-start max-w-screen-md text-center lg:py-8 lg:text-left">
+ <div class="flex flex-col justify-center items-start">
+ <Icon icon="oneconfig" size={38} class="hidden md:block text-blue-500 mb-4"></Icon>
+ <Header size="lg" class="text-3xl font-semibold tracking-tight text-navy-peony">
+ OneConfig has <br>finally arrived.
+ </Header>
+ </div>
+ <Paragraph class="mt-6 text-lg leading-8 text-gray-700">
+ Learn more about what OneConfig is, and how it's revolutionized modding and user experience.
+ </Paragraph>
+ <div class="mt-10 flex items-center justify-center gap-x-4 lg:justify-start">
+ <Button href="/projects/oneconfig" size="sm" iconLeft="oneconfig" style="secondary">Learn more</Button>
+ <Button href="/mods" size="sm" iconLeft="link-external" style="secondary">Discover mods</Button>
+ </div>
+ </div>
+ <div class="flex flex-col justify-center items-center">
+ <img
+ class="max-w-80 rounded-md bg-white/5 ring-1 ring-white/10 pointer-events-none"
+ src="/media/oneconfig/page_media_3.svg"
+ alt="OneConfig Screenshot"
+ width={912}
+ height={540}
+ />
+ </div>
</div>
- </Section>
+ </div>
+ </Section>
- <Section tabindex="0">
- <div slot="left">
- <Header size="lg" class="text-navy-peony">Best of both worlds</Header>
- <Paragraph size="sm" class="text-gray-400 max-w-[500px]">OneConfig brings the simplicity of a client to the everyday user, gives advanced users and developers complete control over everything, while remaining free and open-source.</Paragraph>
+ <Section wFull maxWidth="1024px" wrapperClass="bg-blue-100 mb-40" class="-mt-20 flex flex-col">
+ <div class="relative isolate overflow-hidden pt-24 mt-10 lg:-ml-10">
+ <div class="mx-auto max-w-7xl">
+ <Header class="text-5xl font-bold tracking-tight text-navy-peony mt-8">Who we are</Header>
+ <Paragraph class="mt-3 text-md leading-8 text-navy-peony">
+ We're a group of passionate, self-driven designers, developers, and modders creating mods and libraries for the Minecraft community.
+ </Paragraph>
+ <div class="mt-3 flex flex-row gap-y-6 gap-x-8 text-base font-semibold leading-7 text-gray-600 lg:gap-x-10">
+ <Button style="secondary" size="sm" iconLeft="user">Meet the team</Button>
+ </div>
</div>
-
- <div slot="right" class="w-3/4 md:w-auto">
- <svg class="w-full h-full" width="615" height="225" viewBox="0 0 615 225" fill="none" xmlns="http://www.w3.org/2000/svg">
- <g filter="url(#filter0_d_14_1169)">
- <path d="M328.885 14H240.347C232.588 14 226.299 20.2895 226.299 28.0479V39.6989C226.299 47.4573 232.588 53.7468 240.347 53.7468H328.885C336.644 53.7468 342.933 47.4573 342.933 39.6989V28.0479C342.933 20.2895 336.644 14 328.885 14Z" fill="#2A2C30"/>
- <path d="M328.885 14.8781H240.347C233.073 14.8781 227.177 20.7744 227.177 28.048V39.6989C227.177 46.9725 233.073 52.8688 240.347 52.8688H328.885C336.159 52.8688 342.055 46.9725 342.055 39.6989V28.048C342.055 20.7744 336.159 14.8781 328.885 14.8781Z" stroke="white" stroke-opacity="0.1" stroke-width="2"/>
- </g>
- <path opacity="0.84" d="M267.154 31.8743H266.072C266.015 31.5814 265.902 31.3025 265.738 31.0534C265.583 30.8216 265.388 30.6196 265.162 30.4572C264.933 30.2947 264.679 30.1719 264.409 30.0937C264.132 30.0118 263.844 29.9707 263.554 29.9717C263.037 29.966 262.528 30.1082 262.089 30.3817C261.632 30.6763 261.27 31.0959 261.045 31.5907C260.77 32.2065 260.638 32.8764 260.659 33.5504C260.638 34.2243 260.77 34.8942 261.045 35.51C261.27 36.0048 261.632 36.4245 262.089 36.719C262.529 36.9932 263.039 37.1355 263.558 37.1291C263.846 37.13 264.133 37.0892 264.409 37.0079C264.678 36.9291 264.931 36.806 265.158 36.6435C265.385 36.4808 265.58 36.2782 265.734 36.0456C265.898 35.797 266.011 35.5191 266.068 35.2273H267.154C267.082 35.6608 266.931 36.0773 266.709 36.4565C266.499 36.809 266.225 37.1195 265.902 37.3723C265.58 37.6252 265.216 37.8195 264.827 37.9465C264.417 38.079 263.988 38.1451 263.558 38.1423C262.84 38.154 262.134 37.9593 261.524 37.5812C260.915 37.1942 260.428 36.6434 260.119 35.9921C259.763 35.2284 259.589 34.3926 259.611 33.5504C259.59 32.707 259.765 31.8702 260.122 31.106C260.432 30.4547 260.919 29.9039 261.527 29.5169C262.138 29.1397 262.844 28.9459 263.561 28.9585C263.993 28.9556 264.423 29.022 264.834 29.1551C265.22 29.2826 265.582 29.4766 265.902 29.7285C266.225 29.9818 266.499 30.2925 266.709 30.6451C266.931 31.0241 267.082 31.4407 267.154 31.8743ZM271.484 38.1598C270.924 38.1721 270.371 38.0221 269.893 37.7279C269.432 37.4329 269.063 37.0139 268.828 36.5189C268.564 35.951 268.434 35.3296 268.448 34.7032C268.434 34.0723 268.564 33.4466 268.83 32.8743C269.064 32.3775 269.433 31.9568 269.895 31.6609C270.373 31.3667 270.925 31.2167 271.486 31.229C272.047 31.2167 272.599 31.3667 273.077 31.6609C273.539 31.9568 273.909 32.3775 274.142 32.8743C274.408 33.4466 274.538 34.0723 274.524 34.7032C274.538 35.3297 274.407 35.9511 274.142 36.5189C273.907 37.0141 273.537 37.4331 273.075 37.7279C272.598 38.0221 272.045 38.1721 271.484 38.1598ZM271.484 37.2344C271.892 37.2518 272.293 37.1277 272.62 36.8832C272.921 36.6396 273.149 36.3167 273.277 35.9508C273.423 35.5508 273.495 35.1279 273.491 34.7023C273.495 34.2756 273.422 33.8516 273.277 33.4503C273.148 33.0825 272.92 32.7576 272.618 32.5117C272.293 32.2638 271.891 32.1371 271.483 32.1535C271.074 32.1371 270.673 32.2638 270.347 32.5117C270.045 32.7576 269.817 33.0825 269.688 33.4503C269.543 33.8519 269.47 34.2761 269.474 34.7032C269.47 35.1288 269.542 35.5517 269.688 35.9517C269.818 36.3161 270.047 36.6371 270.349 36.8788C270.675 37.1249 271.076 37.2506 271.484 37.2344ZM276.094 38.0202V31.3159H277.089V32.3633H277.177C277.306 32.0186 277.544 31.7253 277.854 31.5275C278.191 31.3209 278.581 31.2169 278.976 31.2281C279.367 31.2137 279.753 31.3181 280.083 31.5275C280.386 31.7366 280.626 32.026 280.774 32.3633H280.845C281.016 32.0179 281.284 31.7303 281.617 31.5362C281.993 31.3229 282.42 31.2166 282.853 31.229C283.123 31.2188 283.392 31.2633 283.645 31.3597C283.898 31.4561 284.128 31.6025 284.323 31.79C284.531 32.0274 284.688 32.3042 284.786 32.6037C284.884 32.9033 284.921 33.2196 284.895 33.5337V38.0202H283.863V33.5328C283.883 33.337 283.857 33.1393 283.788 32.9552C283.718 32.7711 283.606 32.6057 283.462 32.4722C283.189 32.259 282.852 32.1464 282.506 32.1535C282.303 32.1411 282.1 32.1728 281.911 32.2463C281.722 32.3198 281.551 32.4334 281.41 32.5793C281.147 32.8744 281.008 33.2597 281.022 33.6548V38.0202H279.97V33.4283C279.977 33.2569 279.948 33.0859 279.884 32.9266C279.82 32.7674 279.723 32.6236 279.599 32.5047C279.339 32.2657 278.995 32.1394 278.643 32.1535C278.378 32.1529 278.118 32.2271 277.894 32.3677C277.66 32.5134 277.467 32.7173 277.335 32.9595C277.19 33.2265 277.117 33.5267 277.124 33.8304V38.0202H276.094ZM286.919 38.0202V29.0805H287.949V32.3809H288.037C288.113 32.2638 288.218 32.1146 288.353 31.9331C288.512 31.7311 288.711 31.5646 288.938 31.4441C289.26 31.285 289.617 31.2106 289.975 31.2281C290.503 31.2178 291.023 31.3651 291.467 31.6513C291.91 31.9479 292.26 32.3641 292.475 32.8515C292.729 33.4283 292.853 34.0539 292.838 34.6839C292.853 35.3176 292.73 35.9469 292.475 36.5276C292.261 37.016 291.913 37.4341 291.472 37.734C291.033 38.0211 290.517 38.1695 289.992 38.1598C289.635 38.176 289.279 38.1017 288.958 37.9438C288.727 37.8227 288.523 37.6547 288.36 37.4504C288.22 37.2654 288.113 37.1118 288.037 36.9895H287.915V38.0202H286.919ZM287.932 34.6681C287.923 35.124 287.999 35.5776 288.155 36.0061C288.282 36.3626 288.508 36.6758 288.805 36.9096C289.108 37.1319 289.477 37.2463 289.853 37.2344C290.242 37.2479 290.623 37.127 290.933 36.892C291.232 36.6499 291.459 36.3296 291.588 35.9666C291.739 35.5507 291.814 35.1107 291.808 34.6681C291.814 34.2329 291.741 33.8003 291.592 33.3914C291.465 33.0353 291.239 32.7224 290.942 32.4889C290.627 32.2583 290.243 32.1407 289.853 32.1552C289.477 32.1429 289.107 32.2539 288.799 32.4713C288.504 32.6959 288.28 33.0007 288.153 33.3493C287.999 33.7715 287.924 34.2186 287.932 34.6681ZM296.382 38.18C295.984 38.1837 295.589 38.0992 295.227 37.9324C294.892 37.7803 294.606 37.5369 294.402 37.23C294.191 36.8972 294.084 36.5088 294.096 36.115C294.082 35.7878 294.161 35.4633 294.324 35.179C294.473 34.9408 294.682 34.7458 294.93 34.6136C295.195 34.4728 295.478 34.3694 295.771 34.3063C296.078 34.2378 296.387 34.1834 296.698 34.143C297.107 34.0909 297.438 34.0508 297.691 34.0227C297.884 34.0114 298.074 33.9631 298.249 33.8805C298.309 33.8445 298.357 33.7924 298.388 33.7303C298.419 33.6681 298.432 33.5984 298.425 33.5293V33.4942C298.436 33.3119 298.411 33.1293 298.35 32.957C298.29 32.7847 298.196 32.6261 298.074 32.4906C297.929 32.3633 297.761 32.2664 297.578 32.2057C297.396 32.1451 297.203 32.1219 297.011 32.1377C296.601 32.114 296.194 32.2277 295.855 32.4608C295.606 32.6401 295.404 32.8769 295.266 33.1509L294.288 32.7997C294.437 32.4272 294.678 32.099 294.99 31.8462C295.274 31.622 295.601 31.4585 295.951 31.3659C296.286 31.2758 296.631 31.2294 296.979 31.2281C297.229 31.2315 297.478 31.257 297.723 31.3045C298.012 31.3582 298.289 31.4638 298.54 31.6161C298.819 31.7899 299.045 32.0356 299.196 32.3273C299.389 32.7237 299.48 33.1619 299.46 33.6022V38.0202H298.426V37.1124H298.373C298.282 37.286 298.163 37.4438 298.022 37.5795C297.834 37.7613 297.613 37.905 297.371 38.0027C297.057 38.127 296.72 38.1864 296.382 38.1774V38.18ZM296.54 37.2546C296.899 37.2663 297.255 37.1837 297.572 37.0149C297.837 36.8704 298.058 36.656 298.21 36.3951C298.351 36.1524 298.425 35.8768 298.426 35.5961V34.6505C298.345 34.7229 298.246 34.772 298.139 34.7927C297.973 34.8391 297.804 34.8754 297.633 34.9016C297.442 34.932 297.257 34.9581 297.079 34.9797L296.644 35.0342C296.39 35.0659 296.139 35.1221 295.895 35.2019C295.683 35.2674 295.49 35.3862 295.337 35.5469C295.189 35.719 295.113 35.9418 295.125 36.1685C295.116 36.3265 295.148 36.484 295.218 36.6259C295.288 36.7677 295.394 36.8891 295.525 36.9781C295.827 37.1706 296.181 37.2661 296.54 37.252V37.2546ZM304.257 31.3185V32.1912H300.782V31.3185H304.257ZM301.799 29.7118H302.829V36.1018C302.815 36.3268 302.859 36.5515 302.958 36.7542C303.03 36.8868 303.148 36.9889 303.29 37.0421C303.428 37.0907 303.573 37.115 303.72 37.1141C303.813 37.1157 303.907 37.1093 303.999 37.0948L304.175 37.0623L304.379 37.9851C304.284 38.0185 304.186 38.0455 304.087 38.0659C303.93 38.0967 303.771 38.1108 303.611 38.108C303.316 38.1072 303.025 38.0431 302.758 37.9201C302.48 37.7956 302.242 37.598 302.067 37.3486C301.877 37.0633 301.782 36.7254 301.794 36.3828L301.799 29.7118Z" fill="white"/>
- <g filter="url(#filter1_d_14_1169)">
- <path d="M201.826 14H135.44C127.682 14 121.393 20.2895 121.393 28.0479V39.6989C121.393 47.4573 127.682 53.7468 135.44 53.7468H201.826C209.584 53.7468 215.873 47.4573 215.873 39.6989V28.0479C215.873 20.2895 209.584 14 201.826 14Z" fill="#2A2C30"/>
- <path d="M201.825 14.8781H135.44C128.167 14.8781 122.271 20.7744 122.271 28.048V39.6989C122.271 46.9725 128.167 52.8688 135.44 52.8688H201.825C209.099 52.8688 214.995 46.9725 214.995 39.6989V28.048C214.995 20.7744 209.099 14.8781 201.825 14.8781Z" stroke="white" stroke-opacity="0.1" stroke-width="2"/>
- </g>
- <path opacity="0.84" d="M162.144 29.0804V38.0202H161.096L156.224 31.0015H156.136V38.0202H155.055V29.0804H156.102L160.991 36.1167H161.079V29.0804H162.144ZM166.98 38.1598C166.394 38.1752 165.816 38.0262 165.311 37.7296C164.843 37.442 164.468 37.0244 164.232 36.5276C163.97 35.9626 163.841 35.3451 163.855 34.7224C163.842 34.0956 163.971 33.474 164.232 32.9041C164.462 32.4044 164.827 31.9787 165.286 31.6749C165.76 31.375 166.312 31.2222 166.872 31.2359C167.225 31.2368 167.574 31.2961 167.907 31.4115C168.253 31.5317 168.57 31.7245 168.837 31.9769C169.135 32.2659 169.363 32.619 169.505 33.0095C169.684 33.5166 169.768 34.0523 169.753 34.5899V35.0288H164.588V34.1263H168.708C168.715 33.7758 168.638 33.4289 168.484 33.1139C168.341 32.825 168.12 32.5817 167.846 32.4116C167.555 32.2355 167.219 32.146 166.879 32.1534C166.502 32.1438 166.13 32.2498 165.815 32.4572C165.521 32.6556 165.284 32.9281 165.128 33.2474C164.968 33.5702 164.886 33.9259 164.888 34.2861V34.8796C164.875 35.3227 164.965 35.7629 165.152 36.165C165.312 36.4986 165.568 36.7768 165.887 36.9639C166.222 37.151 166.6 37.2453 166.983 37.237C167.233 37.2403 167.482 37.2011 167.719 37.1211C167.932 37.0474 168.127 36.9275 168.289 36.7699C168.454 36.6057 168.581 36.4065 168.66 36.1869L169.656 36.4661C169.554 36.8001 169.373 37.1047 169.129 37.3547C168.87 37.6167 168.557 37.8193 168.212 37.9482C167.818 38.0951 167.4 38.1668 166.98 38.1598ZM172.849 38.0202L170.803 31.3158H171.883L173.335 36.4486H173.406L174.838 31.3149H175.938L177.351 36.431H177.422L178.871 31.3149H179.954L177.91 38.0202H176.897L175.43 32.8699H175.326L173.86 38.0202H172.849Z" fill="white"/>
- <g filter="url(#filter2_d_14_1169)">
- <path d="M96.7495 14H44.0479C36.2895 14 30 20.2895 30 28.0479V39.6989C30 47.4573 36.2895 53.7468 44.0479 53.7468H96.7495C104.508 53.7468 110.797 47.4573 110.797 39.6989V28.0479C110.797 20.2895 104.508 14 96.7495 14Z" fill="#2B4BFF"/>
- </g>
- <path opacity="0.84" d="M64.0298 38.0202H62.8945L66.18 29.0804H67.2942L70.577 38.0202H69.4417L66.7709 30.4949H66.7006L64.0298 38.0202ZM64.4486 34.5284H69.0229V35.4889H64.4486V34.5284ZM72.8641 29.0848V38.0202H71.8343V29.0804L72.8641 29.0848ZM75.78 29.0848V38.0202H74.7501V29.0804L75.78 29.0848Z" fill="white"/>
- <g filter="url(#filter3_d_14_1169)">
- <path d="M283.467 64.2019H44.0479C36.2895 64.2019 30 70.4914 30 78.2498V175.382C30 183.141 36.2895 189.43 44.0479 189.43H283.467C291.225 189.43 297.515 183.141 297.515 175.382V78.2498C297.515 70.4914 291.225 64.2019 283.467 64.2019Z" fill="#2A2C30"/>
- <path d="M283.467 65.08H44.0478C36.7743 65.08 30.8779 70.9763 30.8779 78.2499V175.382C30.8779 182.656 36.7743 188.552 44.0478 188.552H283.467C290.741 188.552 296.637 182.656 296.637 175.382V78.2499C296.637 70.9763 290.741 65.08 283.467 65.08Z" stroke="white" stroke-opacity="0.1" stroke-width="2"/>
- </g>
- <g filter="url(#filter4_d_14_1169)">
- <path d="M30 159.025H297.515V180.825C297.51 182.548 297.166 184.253 296.502 185.843C295.838 187.433 294.868 188.876 293.646 190.091C292.424 191.306 290.975 192.268 289.382 192.923C287.788 193.578 286.081 193.912 284.358 193.907H43.1567C41.4338 193.912 39.7269 193.578 38.1332 192.923C36.5396 192.268 35.0906 191.306 33.8688 190.091C32.6471 188.876 31.6766 187.433 31.0128 185.843C30.349 184.253 30.0048 182.548 30 180.825V159.025Z" fill="#2B4BFF"/>
- </g>
- <path d="M274.438 176.697L279.969 182.201L285.501 176.697C285.831 176.37 286.093 175.98 286.272 175.551C286.451 175.121 286.544 174.66 286.544 174.195C286.544 173.73 286.451 173.269 286.272 172.84C286.093 172.41 285.831 172.02 285.501 171.693C284.831 171.029 283.927 170.657 282.984 170.657C282.042 170.657 281.137 171.029 280.468 171.693L279.965 172.193L279.462 171.693C278.792 171.029 277.888 170.657 276.945 170.657C276.003 170.657 275.099 171.029 274.429 171.693C274.099 172.021 273.838 172.411 273.659 172.841C273.481 173.271 273.39 173.732 273.391 174.197C273.391 174.662 273.484 175.123 273.664 175.552C273.844 175.981 274.107 176.37 274.438 176.697Z" fill="white" stroke="white" stroke-width="1.333" stroke-linejoin="round"/>
- <path d="M157.24 133.605H142.606C138.773 133.605 134.904 130.694 134.904 124.193V111.253C134.958 105.354 137.167 99.6776 141.115 95.2937C145.063 90.9099 150.477 88.1206 156.339 87.4512C156.894 87.4108 157.457 87.3906 158.013 87.3906H158.101C156.271 88.8861 154.88 90.8504 154.079 93.0739C150.069 94.1449 146.522 96.5046 143.985 99.7895C141.448 103.074 140.062 107.102 140.039 111.253V124.193C140.039 125.196 140.224 128.47 142.606 128.47H157.24C161.85 128.446 166.293 126.74 169.736 123.673C173.178 120.606 175.382 116.388 175.936 111.81C175.966 111.385 175.982 110.954 175.982 110.528H181.118C181.118 111.078 181.096 111.63 181.058 112.169C180.388 118.033 177.596 123.45 173.209 127.398C168.821 131.347 163.142 133.554 157.24 133.605Z" fill="#E0E9FB"/>
- <path d="M184.251 106.95H166.353C164.482 106.95 162.653 106.395 161.097 105.355C159.541 104.316 158.329 102.838 157.613 101.11C156.897 99.381 156.709 97.4789 157.074 95.6438C157.439 93.8086 158.34 92.123 159.663 90.7999C160.54 89.9185 161.582 89.2197 162.73 88.7441C163.879 88.2684 165.11 88.0254 166.353 88.029H184.251C186.122 88.029 187.951 88.5839 189.507 89.6234C191.062 90.6629 192.275 92.1404 192.991 93.869C193.707 95.5977 193.894 97.4998 193.529 99.3349C193.164 101.17 192.263 102.856 190.94 104.179C190.064 105.06 189.021 105.759 187.873 106.235C186.725 106.71 185.494 106.953 184.251 106.95ZM165.652 93.1424C163.642 93.1424 162.006 95.0924 162.006 97.4893C162.006 99.8863 163.642 101.836 165.652 101.836H184.951C186.962 101.836 188.598 99.8863 188.598 97.4893C188.598 95.0924 186.962 93.1424 184.951 93.1424H165.652Z" fill="#E0E9FB"/>
- <path opacity="0.7" d="M170.22 137.695H174.502C177.341 137.692 180.062 136.563 182.069 134.556C184.076 132.549 185.205 129.828 185.209 126.989V122.706C185.209 122.138 184.983 121.594 184.581 121.192C184.18 120.79 183.635 120.565 183.067 120.565C182.499 120.565 181.955 120.79 181.553 121.192C181.151 121.594 180.926 122.138 180.926 122.706V126.989C180.926 127.833 180.76 128.668 180.437 129.448C180.114 130.227 179.641 130.935 179.044 131.532C178.448 132.128 177.739 132.602 176.96 132.924C176.181 133.247 175.345 133.413 174.502 133.413H170.22C169.652 133.413 169.107 133.639 168.705 134.041C168.304 134.442 168.078 134.987 168.078 135.555C168.078 136.123 168.304 136.667 168.705 137.069C169.107 137.471 169.652 137.695 170.22 137.695Z" fill="#E0E9FB"/>
- <path d="M53.6723 174.275H52.2807C52.208 173.899 52.0621 173.541 51.8514 173.222C51.6525 172.924 51.4015 172.664 51.1104 172.455C50.817 172.246 50.4905 172.087 50.1446 171.986C49.7874 171.881 49.4168 171.828 49.0444 171.829C48.3775 171.821 47.7222 172.004 47.1559 172.356C46.5705 172.735 46.1064 173.275 45.8187 173.911C45.4654 174.703 45.2955 175.564 45.3217 176.431C45.2955 177.297 45.4654 178.159 45.8187 178.95C46.1065 179.588 46.5716 180.129 47.1585 180.509C47.7248 180.861 48.3802 181.044 49.0471 181.036C49.4195 181.037 49.7901 180.984 50.1472 180.879C50.4931 180.777 50.8196 180.619 51.113 180.41C51.4046 180.2 51.6557 179.94 51.854 179.641C52.0641 179.321 52.21 178.963 52.2834 178.587H53.675C53.582 179.144 53.388 179.68 53.1025 180.167C52.833 180.62 52.482 181.019 52.0674 181.344C51.653 181.669 51.1846 181.919 50.6837 182.082C50.1554 182.253 49.6032 182.338 49.048 182.334C48.1256 182.35 47.2181 182.101 46.4333 181.616C45.6527 181.118 45.0284 180.41 44.6316 179.573C44.1722 178.59 43.9474 177.514 43.9749 176.43C43.9474 175.345 44.1722 174.269 44.6316 173.287C45.0284 172.45 45.6527 171.742 46.4333 171.243C47.2183 170.758 48.1262 170.509 49.0488 170.525C49.6041 170.522 50.1563 170.607 50.6845 170.778C51.1855 170.941 51.6538 171.191 52.0683 171.517C52.4816 171.843 52.8313 172.242 53.0999 172.695C53.386 173.182 53.58 173.718 53.6723 174.275ZM56.7286 176.992V182.177H55.4064V170.683H56.7286V174.904H56.841C57.0348 174.466 57.3526 174.095 57.755 173.836C58.2468 173.55 58.811 173.413 59.3793 173.44C59.9149 173.428 60.4451 173.549 60.9228 173.791C61.3709 174.032 61.7314 174.409 61.9527 174.867C62.2175 175.44 62.3435 176.068 62.3206 176.699V182.177H60.9957V176.79C61.0333 176.211 60.8444 175.641 60.4689 175.199C60.278 175.006 60.0484 174.857 59.7954 174.76C59.5423 174.662 59.2715 174.62 59.0009 174.635C58.596 174.628 58.1957 174.723 57.8367 174.91C57.4949 175.093 57.2141 175.372 57.0289 175.712C56.8204 176.106 56.717 176.547 56.7286 176.992ZM66.9494 182.379C66.4367 182.386 65.9288 182.28 65.462 182.067C65.0308 181.872 64.6633 181.559 64.4014 181.164C64.1303 180.736 63.9936 180.237 64.009 179.73C63.9904 179.309 64.0915 178.892 64.3005 178.526C64.4923 178.22 64.7612 177.969 65.0801 177.799C65.4201 177.618 65.7835 177.485 66.16 177.403C66.5546 177.316 66.952 177.245 67.3524 177.193C67.8762 177.125 68.3018 177.074 68.629 177.038C68.8778 177.024 69.1216 176.962 69.3472 176.856C69.4235 176.81 69.4853 176.743 69.5255 176.664C69.5658 176.585 69.5828 176.496 69.5746 176.407V176.362C69.5889 176.128 69.5563 175.893 69.4787 175.671C69.401 175.45 69.2799 175.246 69.1224 175.072C68.9375 174.907 68.7211 174.781 68.4863 174.702C68.2516 174.623 68.0032 174.592 67.7562 174.611C67.2281 174.581 66.7048 174.727 66.2689 175.027C65.9489 175.257 65.689 175.561 65.5112 175.914L64.2539 175.465C64.4445 174.985 64.7546 174.562 65.1547 174.236C65.5198 173.948 65.94 173.739 66.3892 173.621C66.8202 173.506 67.2644 173.447 67.7106 173.445C68.0319 173.45 68.3521 173.483 68.6676 173.544C69.0402 173.613 69.3972 173.749 69.7212 173.945C70.0799 174.169 70.3716 174.485 70.5658 174.86C70.8128 175.369 70.9286 175.933 70.903 176.498V182.177H69.5763V181.009H69.5087C69.3925 181.232 69.241 181.435 69.0601 181.61C68.8193 181.844 68.5355 182.029 68.2242 182.154C67.8188 182.315 67.3851 182.391 66.9494 182.379ZM67.1513 181.189C67.6132 181.204 68.0709 181.098 68.4788 180.88C68.8195 180.694 69.1028 180.419 69.298 180.083C69.4794 179.771 69.5751 179.417 69.5754 179.056V177.844C69.4715 177.937 69.3444 178 69.2076 178.027C68.9937 178.087 68.7764 178.133 68.557 178.167C68.3117 178.207 68.0741 178.24 67.844 178.268L67.2856 178.339C66.9575 178.379 66.6341 178.452 66.3198 178.555C66.047 178.637 65.7998 178.788 65.6016 178.994C65.4111 179.215 65.3136 179.502 65.3295 179.793C65.3179 179.997 65.3591 180.199 65.4491 180.382C65.5391 180.564 65.6749 180.72 65.8431 180.835C66.2327 181.084 66.6892 181.207 67.1513 181.189ZM76.7416 173.557V174.679H72.2744V173.557H76.7416ZM73.5765 171.492H74.9031V179.708C74.8849 179.998 74.942 180.287 75.069 180.548C75.1623 180.718 75.3137 180.85 75.4957 180.918C75.6735 180.98 75.8606 181.011 76.0489 181.01C76.1691 181.012 76.2892 181.004 76.408 180.985L76.6328 180.943L76.9023 182.132C76.7795 182.175 76.6539 182.21 76.5265 182.236C76.3241 182.276 76.1181 182.293 75.9119 182.289C75.5333 182.288 75.1594 182.206 74.8153 182.048C74.4587 181.888 74.1522 181.634 73.9285 181.313C73.6832 180.945 73.5602 180.509 73.5773 180.067L73.5765 171.492ZM82.1571 173.557V174.679H77.6899V173.557H82.1571ZM78.9919 171.492H80.3168V179.708C80.2986 179.998 80.3558 180.287 80.4827 180.548C80.576 180.718 80.7275 180.85 80.9095 180.918C81.0872 180.98 81.2743 181.011 81.4626 181.01C81.5828 181.012 81.7029 181.004 81.8217 180.985L82.0465 180.943L82.316 182.132C82.1932 182.175 82.0677 182.21 81.9402 182.236C81.7378 182.276 81.5318 182.293 81.3256 182.289C80.9467 182.288 80.5725 182.206 80.2281 182.048C79.8715 181.888 79.565 181.634 79.3414 181.313C79.096 180.945 78.9731 180.509 78.9902 180.067L78.9919 171.492ZM83.8226 182.177V173.557H85.1475V182.177H83.8226ZM84.4961 172.12C84.3734 172.122 84.2515 172.099 84.1375 172.054C84.0234 172.009 83.9194 171.942 83.8314 171.856C83.743 171.776 83.6725 171.678 83.6247 171.569C83.5769 171.46 83.5528 171.342 83.554 171.222C83.5528 171.103 83.5769 170.985 83.6247 170.876C83.6725 170.766 83.743 170.669 83.8314 170.588C83.9194 170.503 84.0234 170.436 84.1375 170.391C84.2515 170.345 84.3734 170.323 84.4961 170.325C84.6187 170.323 84.7406 170.345 84.8547 170.39C84.9687 170.436 85.0727 170.503 85.1607 170.588C85.2491 170.669 85.3196 170.766 85.3674 170.876C85.4152 170.985 85.4393 171.103 85.4381 171.222C85.4393 171.342 85.4152 171.46 85.3674 171.569C85.3196 171.678 85.2491 171.776 85.1607 171.856C85.0727 171.942 84.9687 172.009 84.8547 172.054C84.7406 172.099 84.6187 172.122 84.4961 172.12ZM88.5647 176.992V182.177H87.2398V173.557H88.519V174.904H88.6314C88.8306 174.472 89.1501 174.106 89.5515 173.85C90.0322 173.563 90.5863 173.422 91.146 173.445C91.6786 173.432 92.2056 173.555 92.6781 173.801C93.1221 174.045 93.4791 174.422 93.6992 174.878C93.9611 175.449 94.0859 176.072 94.0636 176.699V182.177H92.7404V176.79C92.7755 176.213 92.5868 175.645 92.2136 175.204C92.0271 175.011 91.8013 174.86 91.5516 174.762C91.3018 174.664 91.0339 174.62 90.7658 174.634C90.3715 174.627 89.982 174.722 89.635 174.909C89.3014 175.095 89.0292 175.374 88.8518 175.712C88.6503 176.107 88.5516 176.548 88.5647 176.992ZM99.6362 185.589C99.0764 185.601 98.5186 185.519 97.9864 185.345C97.5673 185.205 97.178 184.988 96.8389 184.705C96.5532 184.464 96.3078 184.179 96.1119 183.86L97.1655 183.119C97.2826 183.276 97.4342 183.457 97.6203 183.661C97.8343 183.887 98.091 184.068 98.3754 184.194C98.7738 184.361 99.2038 184.438 99.6353 184.421C100.249 184.446 100.854 184.269 101.358 183.916C101.591 183.728 101.775 183.486 101.893 183.21C102.011 182.935 102.06 182.635 102.037 182.336V180.584H101.924C101.827 180.74 101.69 180.934 101.512 181.165C101.303 181.421 101.043 181.63 100.749 181.779C100.33 181.975 99.8707 182.065 99.4097 182.043C98.7522 182.053 98.1046 181.882 97.5378 181.549C96.9731 181.206 96.5192 180.707 96.2304 180.113C95.8917 179.398 95.7271 178.614 95.7502 177.823C95.7321 177.028 95.8914 176.24 96.2164 175.514C96.4963 174.893 96.9458 174.364 97.5132 173.987C98.0853 173.621 98.7532 173.432 99.4325 173.445C99.8948 173.424 100.355 173.519 100.771 173.723C101.065 173.878 101.325 174.092 101.534 174.352C101.709 174.586 101.847 174.777 101.946 174.927H102.081V173.557H103.36V182.424C103.388 183.065 103.212 183.699 102.858 184.233C102.52 184.701 102.051 185.059 101.511 185.261C100.912 185.486 100.276 185.597 99.6362 185.589ZM99.5914 180.852C100.067 180.868 100.536 180.741 100.938 180.488C101.317 180.229 101.608 179.862 101.774 179.434C101.977 178.912 102.074 178.356 102.06 177.796C102.071 177.235 101.975 176.677 101.779 176.151C101.615 175.707 101.327 175.319 100.949 175.035C100.552 174.756 100.075 174.614 99.5905 174.631C99.0891 174.612 98.596 174.762 98.1901 175.057C97.8102 175.352 97.5206 175.748 97.3543 176.199C97.1639 176.708 97.0698 177.249 97.0768 177.792C97.0665 178.334 97.1628 178.873 97.3604 179.378C97.53 179.812 97.8227 180.186 98.2024 180.455C98.6129 180.729 99.0984 180.868 99.5914 180.852Z" fill="white"/>
- <g filter="url(#filter5_d_14_1169)">
- <path d="M565.089 64.0457H325.67C317.912 64.0457 311.622 70.3351 311.622 78.0935V175.226C311.622 182.984 317.912 189.274 325.67 189.274H565.089C572.848 189.274 579.137 182.984 579.137 175.226V78.0935C579.137 70.3351 572.848 64.0457 565.089 64.0457Z" fill="#2A2C30"/>
- <path d="M565.089 64.9236H325.67C318.396 64.9236 312.5 70.82 312.5 78.0935V175.226C312.5 182.499 318.396 188.396 325.67 188.396H565.089C572.363 188.396 578.259 182.499 578.259 175.226V78.0935C578.259 70.82 572.363 64.9236 565.089 64.9236Z" stroke="white" stroke-opacity="0.1" stroke-width="2"/>
- </g>
- <g filter="url(#filter6_d_14_1169)">
- <path d="M311.622 158.878H579.137V180.677C579.132 182.4 578.788 184.105 578.124 185.695C577.46 187.285 576.49 188.729 575.268 189.943C574.046 191.158 572.597 192.12 571.004 192.775C569.41 193.43 567.703 193.764 565.98 193.759H324.779C323.056 193.764 321.349 193.43 319.755 192.775C318.162 192.12 316.713 191.158 315.491 189.943C314.269 188.729 313.299 187.285 312.635 185.695C311.971 184.105 311.627 182.4 311.622 180.677V158.878Z" fill="#2B4BFF"/>
- </g>
- <path d="M556.06 176.541L561.591 182.044L567.123 176.541C567.453 176.214 567.715 175.824 567.894 175.394C568.073 174.965 568.166 174.504 568.166 174.039C568.166 173.574 568.073 173.113 567.894 172.683C567.715 172.254 567.453 171.864 567.123 171.537C566.453 170.873 565.549 170.501 564.606 170.501C563.664 170.501 562.759 170.873 562.09 171.537L561.587 172.037L561.084 171.537C560.414 170.873 559.51 170.501 558.568 170.501C557.625 170.501 556.721 170.873 556.051 171.537C555.721 171.865 555.46 172.255 555.281 172.685C555.103 173.115 555.012 173.575 555.013 174.041C555.014 174.506 555.106 174.966 555.286 175.396C555.466 175.825 555.729 176.214 556.06 176.541Z" fill="white" stroke="white" stroke-width="1.333" stroke-linejoin="round"/>
- <path d="M335.294 173.466H333.903C333.83 173.091 333.684 172.733 333.473 172.413C333.275 172.115 333.024 171.855 332.732 171.646C332.439 171.437 332.113 171.279 331.767 171.178C331.41 171.072 331.039 171.019 330.667 171.02C330 171.012 329.344 171.195 328.778 171.547C328.193 171.927 327.728 172.466 327.441 173.102C327.087 173.894 326.918 174.755 326.944 175.622C326.918 176.489 327.087 177.35 327.441 178.142C327.729 178.779 328.194 179.32 328.781 179.7C329.347 180.053 330.002 180.235 330.669 180.227C331.042 180.228 331.412 180.175 331.769 180.07C332.115 179.969 332.442 179.81 332.735 179.601C333.027 179.392 333.278 179.131 333.476 178.832C333.686 178.512 333.832 178.154 333.905 177.778H335.297C335.204 178.336 335.01 178.871 334.725 179.359C334.455 179.811 334.104 180.21 333.689 180.535C333.275 180.86 332.807 181.11 332.306 181.274C331.777 181.444 331.225 181.53 330.67 181.526C329.748 181.541 328.84 181.292 328.055 180.807C327.275 180.309 326.65 179.601 326.254 178.764C325.794 177.782 325.569 176.706 325.597 175.621C325.569 174.537 325.794 173.461 326.254 172.478C326.65 171.641 327.275 170.933 328.055 170.435C328.84 169.95 329.748 169.7 330.671 169.717C331.226 169.713 331.778 169.798 332.307 169.969C332.808 170.133 333.276 170.383 333.69 170.708C334.104 171.034 334.453 171.433 334.722 171.886C335.008 172.373 335.202 172.909 335.294 173.466ZM337.028 181.368V172.748H338.307V174.05H338.395C338.556 173.619 338.856 173.253 339.248 173.012C339.663 172.745 340.147 172.606 340.64 172.613C340.737 172.613 340.858 172.615 341.004 172.618C341.15 172.622 341.26 172.628 341.336 172.636V173.983C341.291 173.972 341.189 173.954 341.03 173.929C340.864 173.904 340.696 173.892 340.528 173.892C340.139 173.886 339.754 173.976 339.409 174.156C339.091 174.321 338.823 174.569 338.634 174.874C338.443 175.186 338.345 175.547 338.351 175.913V181.368H337.028ZM345.111 181.57C344.6 181.577 344.093 181.47 343.627 181.259C343.196 181.063 342.827 180.75 342.565 180.355C342.294 179.927 342.157 179.428 342.173 178.921C342.154 178.501 342.255 178.083 342.464 177.718C342.656 177.411 342.925 177.161 343.244 176.991C343.584 176.809 343.947 176.676 344.324 176.595C344.718 176.507 345.116 176.437 345.516 176.384C346.04 176.317 346.465 176.265 346.793 176.23C347.041 176.215 347.285 176.153 347.511 176.047C347.587 176.001 347.649 175.935 347.689 175.855C347.729 175.776 347.746 175.687 347.738 175.598V175.553C347.753 175.319 347.72 175.084 347.642 174.863C347.565 174.641 347.444 174.437 347.286 174.263C347.101 174.098 346.885 173.972 346.65 173.893C346.415 173.814 346.167 173.783 345.92 173.803C345.392 173.772 344.868 173.918 344.433 174.218C344.113 174.449 343.853 174.753 343.675 175.105L342.418 174.656C342.608 174.176 342.918 173.753 343.318 173.427C343.683 173.14 344.104 172.931 344.553 172.812C344.984 172.697 345.428 172.638 345.874 172.637C346.196 172.641 346.516 172.674 346.831 172.735C347.204 172.804 347.561 172.94 347.885 173.136C348.244 173.36 348.535 173.676 348.729 174.051C348.975 174.561 349.089 175.124 349.062 175.689V181.368H347.745V180.201H347.678C347.561 180.424 347.41 180.627 347.229 180.801C346.988 181.035 346.704 181.22 346.393 181.346C345.986 181.507 345.549 181.583 345.111 181.57ZM345.313 180.381C345.775 180.395 346.233 180.289 346.641 180.072C346.981 179.886 347.265 179.61 347.46 179.274C347.641 178.962 347.737 178.608 347.737 178.247V177.036C347.633 177.128 347.506 177.192 347.369 177.218C347.156 177.278 346.938 177.325 346.719 177.359C346.474 177.398 346.236 177.431 346.006 177.46L345.448 177.53C345.119 177.571 344.796 177.643 344.482 177.746C344.209 177.829 343.962 177.98 343.764 178.185C343.573 178.406 343.476 178.693 343.491 178.985C343.48 179.188 343.521 179.39 343.611 179.573C343.701 179.755 343.837 179.912 344.005 180.026C344.396 180.276 344.853 180.4 345.317 180.381H345.313ZM357.264 174.679L356.075 175.016C355.994 174.807 355.884 174.612 355.746 174.435C355.59 174.236 355.389 174.075 355.16 173.966C354.862 173.832 354.538 173.769 354.212 173.781C353.746 173.763 353.286 173.889 352.895 174.143C352.736 174.237 352.603 174.372 352.511 174.532C352.419 174.693 352.37 174.875 352.368 175.06C352.362 175.209 352.391 175.358 352.454 175.493C352.516 175.629 352.61 175.747 352.727 175.84C353.064 176.074 353.446 176.236 353.849 176.316L355.128 176.631C355.77 176.752 356.366 177.048 356.851 177.487C357.04 177.682 357.188 177.914 357.285 178.168C357.383 178.422 357.428 178.693 357.418 178.965C357.424 179.441 357.275 179.906 356.994 180.29C356.69 180.697 356.284 181.015 355.816 181.211C355.258 181.445 354.658 181.558 354.054 181.544C353.286 181.575 352.527 181.377 351.872 180.976C351.586 180.786 351.342 180.541 351.154 180.254C350.966 179.967 350.838 179.645 350.778 179.308L352.035 178.993C352.126 179.414 352.369 179.785 352.717 180.037C353.11 180.287 353.57 180.409 354.034 180.389C354.555 180.416 355.071 180.277 355.508 179.993C355.671 179.892 355.806 179.752 355.901 179.586C355.997 179.42 356.05 179.233 356.055 179.042C356.058 178.901 356.031 178.761 355.977 178.631C355.923 178.501 355.842 178.384 355.74 178.287C355.465 178.05 355.132 177.892 354.774 177.829L353.338 177.492C352.686 177.377 352.083 177.073 351.601 176.619C351.229 176.216 351.031 175.683 351.048 175.135C351.041 174.671 351.186 174.218 351.461 173.844C351.753 173.457 352.143 173.155 352.589 172.966C353.102 172.746 353.655 172.637 354.213 172.646C354.928 172.606 355.636 172.803 356.226 173.207C356.713 173.581 357.075 174.095 357.264 174.679ZM360.412 176.183V181.368H359.087V169.875H360.412V174.095H360.524C360.718 173.658 361.034 173.287 361.436 173.027C361.928 172.741 362.492 172.604 363.06 172.631C363.596 172.619 364.126 172.74 364.604 172.983C365.051 173.223 365.412 173.598 365.633 174.055C365.898 174.628 366.024 175.256 366.001 175.887V181.368H364.677V175.981C364.715 175.402 364.526 174.832 364.151 174.39C363.96 174.198 363.73 174.048 363.477 173.951C363.224 173.854 362.953 173.811 362.683 173.826C362.278 173.82 361.877 173.914 361.518 174.101C361.177 174.284 360.896 174.563 360.711 174.904C360.503 175.297 360.4 175.738 360.412 176.183ZM368.274 181.368V169.875H372.153C372.921 169.844 373.684 170.011 374.368 170.36C374.917 170.657 375.362 171.115 375.644 171.671C375.927 172.244 376.069 172.876 376.06 173.515C376.068 174.153 375.926 174.785 375.647 175.359C375.367 175.918 374.923 176.378 374.376 176.68C373.697 177.032 372.939 177.201 372.175 177.171H369.392V175.936H372.131C372.646 175.96 373.158 175.849 373.618 175.617C373.975 175.421 374.261 175.118 374.434 174.749C374.61 174.361 374.697 173.938 374.69 173.512C374.697 173.087 374.61 172.665 374.434 172.278C374.261 171.911 373.972 171.61 373.613 171.422C373.145 171.194 372.628 171.087 372.109 171.11H369.665V181.368H368.274ZM380.334 181.57C379.821 181.577 379.313 181.471 378.846 181.259C378.415 181.063 378.048 180.75 377.786 180.355C377.515 179.927 377.378 179.428 377.393 178.921C377.375 178.501 377.476 178.083 377.685 177.718C377.877 177.411 378.146 177.161 378.464 176.991C378.804 176.809 379.168 176.676 379.544 176.595C379.939 176.507 380.336 176.437 380.737 176.384C381.261 176.317 381.686 176.265 382.013 176.23C382.262 176.215 382.506 176.153 382.732 176.047C382.808 176.001 382.87 175.935 382.91 175.855C382.95 175.776 382.967 175.687 382.959 175.598V175.553C382.973 175.319 382.941 175.084 382.863 174.863C382.785 174.641 382.664 174.437 382.507 174.263C382.322 174.098 382.105 173.972 381.871 173.893C381.636 173.814 381.388 173.783 381.141 173.803C380.612 173.772 380.089 173.918 379.653 174.218C379.333 174.449 379.073 174.753 378.896 175.105L377.638 174.656C377.829 174.176 378.139 173.753 378.539 173.427C378.904 173.14 379.324 172.931 379.774 172.812C380.205 172.697 380.649 172.638 381.095 172.637C381.416 172.641 381.736 172.674 382.052 172.735C382.425 172.804 382.782 172.94 383.106 173.136C383.464 173.36 383.756 173.676 383.95 174.051C384.197 174.561 384.313 175.124 384.287 175.69V181.368H382.96V180.201H382.892C382.776 180.424 382.625 180.627 382.444 180.801C382.203 181.035 381.919 181.22 381.608 181.346C381.203 181.506 380.769 181.582 380.334 181.57ZM380.536 180.381C380.998 180.395 381.455 180.289 381.863 180.072C382.204 179.886 382.487 179.61 382.682 179.274C382.864 178.962 382.96 178.608 382.96 178.247V177.036C382.856 177.128 382.729 177.192 382.592 177.218C382.378 177.278 382.161 177.325 381.941 177.359C381.696 177.398 381.458 177.431 381.228 177.46L380.67 177.53C380.342 177.571 380.018 177.643 379.704 177.746C379.431 177.829 379.184 177.98 378.986 178.185C378.796 178.406 378.698 178.693 378.714 178.985C378.702 179.188 378.743 179.39 378.833 179.573C378.923 179.755 379.059 179.912 379.227 180.026C379.617 180.275 380.074 180.399 380.536 180.381ZM390.126 172.748V173.87H385.659V172.748H390.126ZM386.961 170.683H388.286V178.899C388.267 179.189 388.325 179.478 388.452 179.739C388.545 179.909 388.696 180.041 388.878 180.109C389.056 180.172 389.243 180.203 389.431 180.202C389.552 180.203 389.672 180.195 389.791 180.176L390.015 180.134L390.285 181.324C390.162 181.367 390.037 181.401 389.909 181.427C389.707 181.467 389.501 181.485 389.295 181.481C388.916 181.48 388.541 181.397 388.197 181.239C387.84 181.079 387.534 180.825 387.31 180.504C387.065 180.137 386.942 179.701 386.959 179.259L386.961 170.683ZM395.204 181.544C394.467 181.564 393.74 181.365 393.116 180.972C392.527 180.583 392.06 180.035 391.77 179.391C391.444 178.673 391.282 177.892 391.294 177.103C391.279 176.303 391.447 175.51 391.784 174.783C392.08 174.141 392.548 173.594 393.138 173.203C393.746 172.815 394.456 172.617 395.178 172.633C395.742 172.625 396.301 172.74 396.816 172.97C397.286 173.182 397.697 173.506 398.012 173.913C398.326 174.326 398.525 174.814 398.59 175.328H397.269C397.158 174.919 396.924 174.553 396.599 174.281C396.207 173.961 395.71 173.798 395.204 173.824C394.722 173.814 394.248 173.954 393.849 174.225C393.448 174.509 393.135 174.9 392.945 175.353C392.719 175.892 392.609 176.472 392.622 177.057C392.609 177.652 392.717 178.244 392.939 178.797C393.125 179.258 393.437 179.657 393.84 179.949C394.241 180.226 394.719 180.37 395.206 180.359C395.527 180.364 395.846 180.305 396.143 180.183C396.417 180.068 396.661 179.892 396.856 179.667C397.055 179.433 397.197 179.157 397.271 178.859H398.596C398.526 179.355 398.336 179.826 398.043 180.231C397.74 180.643 397.341 180.973 396.88 181.193C396.356 181.438 395.782 181.558 395.204 181.544ZM401.517 176.179V181.368H400.193V169.875H401.518V174.095H401.63C401.823 173.658 402.14 173.287 402.542 173.027C403.034 172.741 403.598 172.604 404.166 172.631C404.702 172.619 405.232 172.74 405.709 172.983C406.157 173.223 406.517 173.598 406.739 174.055C407.004 174.628 407.13 175.256 407.107 175.887V181.368H405.781V175.981C405.818 175.402 405.629 174.832 405.254 174.39C405.063 174.198 404.833 174.048 404.58 173.951C404.327 173.854 404.056 173.811 403.786 173.826C403.381 173.82 402.981 173.914 402.622 174.101C402.28 174.284 401.999 174.563 401.814 174.904C401.607 175.298 401.504 175.738 401.517 176.183V176.179Z" fill="white"/>
- <path d="M460.286 136.11H452.837C452.178 136.11 451.546 135.848 451.079 135.382C450.613 134.916 450.352 134.283 450.352 133.624C450.352 132.965 450.613 132.333 451.079 131.867C451.546 131.401 452.178 131.139 452.837 131.139H460.286L445.399 106.277L430.462 131.164L437.925 131.139C438.584 131.139 439.216 131.401 439.682 131.867C440.148 132.333 440.41 132.965 440.41 133.624C440.41 134.283 440.148 134.916 439.682 135.382C439.216 135.848 438.584 136.11 437.925 136.11H430.474C429.6 136.109 428.741 135.878 427.985 135.44C427.228 135.002 426.6 134.372 426.165 133.614C425.729 132.856 425.501 131.996 425.504 131.122C425.507 130.248 425.74 129.39 426.18 128.634L441.097 103.722C441.539 102.977 442.167 102.359 442.92 101.931C443.673 101.504 444.525 101.28 445.392 101.282C446.258 101.285 447.109 101.513 447.86 101.946C448.61 102.378 449.235 102.999 449.672 103.747L464.562 128.611C465.009 129.366 465.248 130.225 465.255 131.102C465.262 131.979 465.037 132.842 464.602 133.603C464.168 134.365 463.54 134.998 462.782 135.439C462.024 135.879 461.162 136.111 460.286 136.111V136.11Z" fill="#DFE3EC"/>
- <path d="M425.237 125.144C422.11 124.704 419.248 123.149 417.175 120.767C415.102 118.385 413.959 115.334 413.955 112.176V101.701C413.959 98.23 415.34 94.9024 417.795 92.448C420.249 89.9936 423.577 88.6128 427.048 88.6084H463.709C467.181 88.6123 470.509 89.993 472.963 92.4474C475.418 94.9018 476.799 98.2297 476.804 101.701V112.176C476.8 115.334 475.657 118.385 473.584 120.767C471.511 123.149 468.648 124.703 465.521 125.143L458.469 113.307V93.8456H432.286V113.307L425.237 125.144ZM463.709 93.8456V120.033C465.792 120.03 467.789 119.202 469.262 117.729C470.735 116.256 471.563 114.259 471.565 112.176V101.701C471.563 99.6183 470.734 97.6216 469.262 96.1489C467.789 94.6763 465.792 93.848 463.709 93.8456ZM427.048 93.8456C424.965 93.848 422.968 94.6763 421.496 96.149C420.023 97.6217 419.195 99.6184 419.192 101.701V112.176C419.195 114.259 420.023 116.256 421.496 117.729C422.968 119.202 424.965 120.03 427.048 120.033V93.8456Z" fill="#DFE3EC"/>
- <path opacity="0.7" d="M447.864 126.172V118.717C447.864 118.057 447.602 117.425 447.136 116.959C446.67 116.493 446.038 116.231 445.379 116.231C444.72 116.231 444.087 116.493 443.621 116.959C443.155 117.425 442.894 118.057 442.894 118.717V126.172C442.894 126.831 443.155 127.463 443.621 127.929C444.087 128.395 444.72 128.657 445.379 128.657C446.038 128.657 446.67 128.395 447.136 127.929C447.602 127.463 447.864 126.831 447.864 126.172ZM445.379 131.142C444.888 131.142 444.407 131.288 443.999 131.561C443.59 131.834 443.272 132.222 443.084 132.676C442.896 133.13 442.846 133.629 442.942 134.111C443.038 134.593 443.275 135.036 443.622 135.384C443.97 135.731 444.412 135.968 444.894 136.064C445.376 136.16 445.876 136.11 446.33 135.922C446.784 135.734 447.172 135.416 447.445 135.007C447.718 134.599 447.864 134.118 447.864 133.627C447.864 132.968 447.602 132.336 447.136 131.87C446.67 131.404 446.038 131.142 445.379 131.142Z" fill="#DFE3EC"/>
- <defs>
- <filter id="filter0_d_14_1169" x="210.177" y="0.878052" width="148.878" height="71.9907" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
- <feFlood flood-opacity="0" result="BackgroundImageFix"/>
- <feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
- <feOffset dy="3"/>
- <feGaussianBlur stdDeviation="8"/>
- <feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0"/>
- <feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_14_1169"/>
- <feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_14_1169" result="shape"/>
- </filter>
- <filter id="filter1_d_14_1169" x="105.271" y="0.878052" width="126.725" height="71.9907" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
- <feFlood flood-opacity="0" result="BackgroundImageFix"/>
- <feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
- <feOffset dy="3"/>
- <feGaussianBlur stdDeviation="8"/>
- <feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.369 0"/>
- <feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_14_1169"/>
- <feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_14_1169" result="shape"/>
- </filter>
- <filter id="filter2_d_14_1169" x="24" y="11" width="92.7969" height="51.7468" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
- <feFlood flood-opacity="0" result="BackgroundImageFix"/>
- <feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
- <feOffset dy="3"/>
- <feGaussianBlur stdDeviation="3"/>
- <feColorMatrix type="matrix" values="0 0 0 0 0.0392157 0 0 0 0 0.356863 0 0 0 0 0.909804 0 0 0 0.4 0"/>
- <feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_14_1169"/>
- <feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_14_1169" result="shape"/>
- </filter>
- <filter id="filter3_d_14_1169" x="0.87793" y="35.08" width="331.759" height="189.472" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
- <feFlood flood-opacity="0" result="BackgroundImageFix"/>
- <feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
- <feOffset dx="3" dy="3"/>
- <feGaussianBlur stdDeviation="16"/>
- <feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.38 0"/>
- <feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_14_1169"/>
- <feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_14_1169" result="shape"/>
- </filter>
- <filter id="filter4_d_14_1169" x="24" y="156.025" width="279.515" height="46.8818" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
- <feFlood flood-opacity="0" result="BackgroundImageFix"/>
- <feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
- <feOffset dy="3"/>
- <feGaussianBlur stdDeviation="3"/>
- <feColorMatrix type="matrix" values="0 0 0 0 0.0392157 0 0 0 0 0.356863 0 0 0 0 0.909804 0 0 0 0.412 0"/>
- <feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_14_1169"/>
- <feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_14_1169" result="shape"/>
- </filter>
- <filter id="filter5_d_14_1169" x="282.5" y="34.9236" width="331.759" height="189.472" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
- <feFlood flood-opacity="0" result="BackgroundImageFix"/>
- <feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
- <feOffset dx="3" dy="3"/>
- <feGaussianBlur stdDeviation="16"/>
- <feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.38 0"/>
- <feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_14_1169"/>
- <feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_14_1169" result="shape"/>
- </filter>
- <filter id="filter6_d_14_1169" x="305.622" y="155.878" width="279.515" height="46.8818" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
- <feFlood flood-opacity="0" result="BackgroundImageFix"/>
- <feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
- <feOffset dy="3"/>
- <feGaussianBlur stdDeviation="3"/>
- <feColorMatrix type="matrix" values="0 0 0 0 0.0392157 0 0 0 0 0.356863 0 0 0 0 0.909804 0 0 0 0.412 0"/>
- <feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_14_1169"/>
- <feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_14_1169" result="shape"/>
- </filter>
- </defs>
- </svg>
+ </div>
+ <div class="flex justify-start md:justify-end mb-20 lg:-mr-10">
+ <div class="flex flex-col text-right">
+ <Header class="text-5xl font-bold tracking-tight text-navy-peony mt-8">
+ Our commitment
+ </Header>
+ <Paragraph class="mt-3 text-md leading-8 text-navy-peony">
+ Above all, we're committed to bringing quality, open sourced tools built <br> around usability, accessibility to the greater modding community.
+ </Paragraph>
+ <div class="flex flex-row justify-end items-end mt-3 gap-y-6 text-base font-semibold leading-7 text-brand-600 gap-x-4">
+ <Button iconLeft="book-open" size="sm" href="/oss">Why open source?</Button>
+ <Button iconLeft="github" style="secondary" size="sm" href={configConst.socials.github}>GitHub</Button>
+ </div>
</div>
- </Section>
-
- <Section maxWidth="1100px" wrapperClass="bg-blue-75" class="md:py-20 gap-8">
- <div slot="left">
- <CodeBlock />
+ </div>
+ </Section>
+ <!-- <Section>
+ <div class="bg-white pt-12 sm:pt-16">
+ <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
+ <div class="max-w-4xl mx-auto text-center">
+ <h2 class="text-4xl font-semibold tracking-tight text-gray-800">About our projects</h2>
+ <p class="mt-3 text-xl text-gray-500 sm:mt-4"></p>
+ </div>
</div>
-
- <div slot="right" class="flex flex-col gap-2">
- <Header size="xl" class="text-blue-600">Written for developers</Header>
- <Paragraph class="text-navy-peony max-w-[500px]">
- OneConfig's API was designed to give developers all of the tools available in the simplest way possible
- </Paragraph>
- <div class="flex">
- <Button href="/documentation" iconLeft="book-open" style="secondary" text="Documentation" />
+ <div class="mt-10 pb-12 bg-white sm:pb-16">
+ <div class="relative">
+ <div class="absolute inset-0 h-1/2 bg-white" />
+ <div class="relative max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
+ <div class="max-w-3xl mx-auto">
+ <dl class="sm:grid sm:grid-cols-3">
+ {lang.home.blocks.stats.items.map((item, index) => (
+ <div key={item.name} class="flex flex-col p-3 text-center">
+ <dt class="order-2 mt-2 text-lg leading-6 font-medium text-gray-500">{item.name}</dt>
+ <dd class="order-1 text-5xl font-extrabold text-brand-600">{humanNumber(item.number)}</dd>
+ </div>
+ ))}
+ </dl>
+ </div>
+ </div>
</div>
</div>
- </Section>
- </div>
+ </div>
+ </Section> -->
</Layout>
diff --git a/apps/website/src/pages/legal/ip.astro b/apps/website/src/pages/legal/ip.astro
new file mode 100644
index 0000000..13cfda5
--- /dev/null
+++ b/apps/website/src/pages/legal/ip.astro
@@ -0,0 +1,22 @@
+---
+import Header from '@components/base/Header.astro';
+import Paragraph from '@components/base/Paragraph.astro';
+import Section from '@components/base/Section.astro';
+import Layout from '@layouts/Layout.astro';
+
+const policy = `
+Currently, we do not offer any services that require a intellectual property policy!
+This will be updated in the future, if necessary.
+`.trim();
+---
+
+<Layout>
+ <Section hFull class="justify-center items-start pt-32">
+ <div class="flex flex-col justify-start items-start w-full text-navy-peony">
+ <Header>
+ Intellectual Property Policy
+ </Header>
+ <Paragraph class="whitespace-pre-line">{policy}</Paragraph>
+ </div>
+ </Section>
+</Layout>
diff --git a/apps/website/src/pages/legal/privacy.astro b/apps/website/src/pages/legal/privacy.astro
new file mode 100644
index 0000000..d3940f2
--- /dev/null
+++ b/apps/website/src/pages/legal/privacy.astro
@@ -0,0 +1,22 @@
+---
+import Header from '@components/base/Header.astro';
+import Paragraph from '@components/base/Paragraph.astro';
+import Section from '@components/base/Section.astro';
+import Layout from '@layouts/Layout.astro';
+
+const policy = `
+Currently, we do not offer any services that require a privacy policy!
+This will be updated in the future, if necessary.
+`.trim();
+---
+
+<Layout>
+ <Section hFull class="justify-center items-start pt-32">
+ <div class="flex flex-col justify-start items-start w-full text-navy-peony">
+ <Header>
+ Privacy Policy
+ </Header>
+ <Paragraph class="whitespace-pre-line">{policy}</Paragraph>
+ </div>
+ </Section>
+</Layout>
diff --git a/apps/website/src/pages/legal/security.astro b/apps/website/src/pages/legal/security.astro
new file mode 100644
index 0000000..a80d3f9
--- /dev/null
+++ b/apps/website/src/pages/legal/security.astro
@@ -0,0 +1,22 @@
+---
+import Header from '@components/base/Header.astro';
+import Paragraph from '@components/base/Paragraph.astro';
+import Section from '@components/base/Section.astro';
+import Layout from '@layouts/Layout.astro';
+
+const tos = `
+Currently, we do not offer any services that require a security notice!
+This will be updated in the future, if necessary.
+`.trim();
+---
+
+<Layout>
+ <Section hFull class="justify-center items-start pt-32">
+ <div class="flex flex-col justify-start items-start w-full text-navy-peony">
+ <Header>
+ Security Notice
+ </Header>
+ <Paragraph class="whitespace-pre-line">{tos}</Paragraph>
+ </div>
+ </Section>
+</Layout>
diff --git a/apps/website/src/pages/legal/terms.astro b/apps/website/src/pages/legal/terms.astro
new file mode 100644
index 0000000..6ed2009
--- /dev/null
+++ b/apps/website/src/pages/legal/terms.astro
@@ -0,0 +1,22 @@
+---
+import Header from '@components/base/Header.astro';
+import Paragraph from '@components/base/Paragraph.astro';
+import Section from '@components/base/Section.astro';
+import Layout from '@layouts/Layout.astro';
+
+const tos = `
+Currently, we do not offer any services that require a terms of service!
+This will be updated in the future, if necessary.
+`.trim();
+---
+
+<Layout>
+ <Section hFull class="justify-center items-start pt-32">
+ <div class="flex flex-col justify-start items-start w-full text-navy-peony">
+ <Header>
+ Terms of Service
+ </Header>
+ <Paragraph class="whitespace-pre-line">{tos}</Paragraph>
+ </div>
+ </Section>
+</Layout>
diff --git a/apps/website/src/pages/mods.astro b/apps/website/src/pages/mods.astro
new file mode 100644
index 0000000..ae1002c
--- /dev/null
+++ b/apps/website/src/pages/mods.astro
@@ -0,0 +1,169 @@
+---
+import Button from '@components/base/Button.astro';
+import Card from '@components/base/Card.astro';
+import Header from '@components/base/Header.astro';
+import Paragraph from '@components/base/Paragraph.astro';
+import Section from '@components/base/Section.astro';
+import Slider from '@components/base/Slider.astro';
+import configConst from '@config';
+import Layout from '@layouts/Layout.astro';
+import { Code } from 'astro:components';
+
+const modrinthId = configConst.socials.modrinth.id;
+const modrinthType = configConst.socials.modrinth.type;
+const modrinthUrl = `https://modrinth.com/${modrinthType}/${modrinthId}`;
+---
+
+<Layout>
+ <Section maxWidth="1920px" wFull={true} wrapperClass="h-3/5" class="h-full mt-32 md:mt-28 flex flex-col justify-center items-center max-xl:px-0">
+ <div class="flex flex-col justify-center items-center max-w-full overflow-hidden">
+ <div class="flex flex-col justify-between items-center overflow-hidden h-auto lg:h-[290px] max-w-[1920px] relative">
+ <div class="absolute -bottom-[1px] w-full h-full lg:h-1/2 z-10" style="background-image: linear-gradient(180deg, rgba(0, 0, 0, 0), rgb(240, 242, 244));"/>
+ <Slider wrapperClass="-mb-40 mb-2 hidden lg:block" childrenNum={8}>
+ <Card text="Chatting" icon="chatting"/>
+ <Card text="PolySprint" icon="polysprint"/>
+ <Card text="VanillaHUD" icon="vanillahud"/>
+ <Card text="OverflowAnimations" icon="overflowanimations"/>
+ <Card text="CrashPatch" icon="crashpatch"/>
+ <Card text="PolyTime" icon="polytime"/>
+ <Card text="PolyWeather" icon="polyweather"/>
+ <Card text="Keystrokes" icon="keystrokes"/>
+ </Slider>
+ <Slider dir="right" childrenNum={8}>
+ <Card text="Chatting" icon="chatting"/>
+ <Card text="PolySprint" icon="polysprint"/>
+ <Card text="VanillaHUD" icon="vanillahud"/>
+ <Card text="OverflowAnimations" icon="overflowanimations"/>
+ <Card text="CrashPatch" icon="crashpatch"/>
+ <Card text="PolyTime" icon="polytime"/>
+ <Card text="PolyWeather" icon="polyweather"/>
+ <Card text="Keystrokes" icon="keystrokes"/>
+ </Slider>
+ </div>
+ </div>
+
+ <div class="flex flex-col justify-start items-center max-w-full mt-6 md:mt-10 gap-6 px-4">
+ <Header align="center" size="xxl" class="text-navy-peony max-w-[500px]">Redefining modding, one mod at a time</Header>
+ <div class="flex flex-row justify-center items-center gap-x-2">
+ <Button style="primary" iconLeft="download" href={modrinthUrl}>Download</Button>
+ <Button style="secondary" iconLeft="github" href={configConst.socials.github}>Source</Button>
+ </div>
+
+ <Paragraph class="text-navy-peony text-lg font-semibold max-w-screen-sm text-center mt-20">
+ <span id="mod_count">16</span>+ mods. Unparalleled new features. OneConfig. We combine our groundbreaking library with mods with no equivalent anywhere else.
+ </Paragraph>
+ </div>
+ </Section>
+
+ <Section tabindex="0">
+ <div slot="left">
+ <Header size="lg" class="text-navy-peony"><b id="mod_count_maintained_mods">16</b> maintained mods</Header>
+ <Paragraph size="sm" class="text-gray-400 max-w-[500px]">
+ OneConfig is a revolutionary new way to configure mods. It allows you to configure all of your mods in one place, with a beautiful UI.
+ </Paragraph>
+ </div>
+ <div slot="right">
+ <div class="absolute ml-[21rem] w-1/4 h-full z-10" style="background: linear-gradient(90deg, rgba(246, 246, 246, 0.00) 0%, #F0F2F4 49.21%);"/>
+ <img src="/media/mods/page_media_1.svg" class="w-[120%] overflow-x-clip" alt="stuff"/>
+ </div>
+ </Section>
+
+ <Section tabindex="0">
+ <div slot="left">
+ <img src="/media/mods/page_media_2.svg" class="max-sm:w-full" alt="stuff"/>
+ </div>
+ <div slot="right">
+ <Header size="lg" class="text-navy-peony">We <b>listen</b> to community feedback</Header>
+ <Paragraph size="sm" class="text-gray-400 max-w-[500px]">
+ No more are the days where developers ignore your great new idea. Some of our best mods and ideas are user-suggested, such as BehindYouV3, various Chatting features, and more.
+ </Paragraph>
+ </div>
+ </Section>
+
+ <Section maxWidth="1120px" wrapperClass="bg-blue-75 -mb-40" wFull={false} class="pt-10 md:py-20">
+ <div slot="left">
+ <!-- TODO: FIX Codeblock overflowing on mobile -->
+ <div class="max-sm:hidden">
+ <Code
+ code={
+ `public class MyConfig {
+ @Switch(
+ name = "Sub Switch",
+ category = "General"
+ )
+ public static boolean subSwitch = false;
+
+ public MyConfig() {
+ super(new Mod("My Mod", ModType.UTIL_QOL), "config.json");
+ addDependency("subSwitch", () -> {
+ // Do stuff here
+ });
+ }
+}`
+ }
+ lang="java"
+ />
+ </div>
+ </div>
+
+ <div slot="right" class="flex flex-col gap-2 text-left items-start">
+ <Header size="lg" class="text-blue-500">Open source</Header>
+ <Paragraph class="text-blue-400 max-w-[500px]">
+ All of our mods are open source, and will continue to be open source. Anyone can learn, contribute, or take from our code (as long as it follows our license).
+ </Paragraph>
+ <div class="flex">
+ <Button href="https://docs.polyfrost.org" iconLeft="book-open" style="secondary" text="Documentation"/>
+ </div>
+ </div>
+ </Section>
+
+ <Section maxWidth="1120px" wrapperClass="bg-blue-75" wFull={false} class="py-10 md:py-20 gap-4">
+ <div slot="left" class="flex flex-col gap-2 text-left items-start">
+ <Header size="lg" class="text-blue-500">Powered by OneConfig</Header>
+ <Paragraph class="text-blue-400 max-w-[500px]">
+ OneConfig brings the simplicity of a client to the everyday user, gives advanced users and developers complete control over everything, while remaining free and open-source.
+ </Paragraph>
+ <div class="flex">
+ <Button href="/projects/oneconfig" style="secondary" iconLeft="oneconfig" text="See OneConfig"/>
+ </div>
+ </div>
+ <div slot="right">
+ <img src="/media/oneconfig/page_media_3.svg" class="max-sm:w-full" alt="stuff"/>
+ </div>
+ </Section>
+
+ <Section wrapperClass="flex justify-center items-center min-h-screen -mt-40" class="flex-col justify-center items-center">
+ <div class="flex flex-col gap-y-1 relative justify-center items-center">
+ <Header size="xl" class="text-navy-peony text-header-page w-11/12 md:max-w-lg text-center">Get our mods, available on Modrinth and GitHub.</Header>
+ <div class="flex flex-row justify-center items-center gap-x-2">
+ <Button style="primary" iconLeft="link-external" href={modrinthUrl}>Modrinth</Button>
+ <Button style="primary" iconLeft="github" href={configConst.socials.github}>GitHub</Button>
+ </div>
+ </div>
+ </Section>
+
+</Layout>
+
+<script define:vars={{ modrinthType: modrinthType, modrinthId: modrinthId }}>
+
+async function getModCount() {
+ const res = await fetch(`https://api.modrinth.com/v2/${modrinthType}/${modrinthId}/projects`);
+ const data = await res.json();
+ const mods = data.filter((mod) => {
+ return mod.slug !== 'oneconfig' && mod.slug !== 'easeify';
+ });
+
+ return mods.length;
+}
+
+getModCount().then((size) => {
+ const modCount = document.getElementById('mod_count');
+ const modCountMaintainedMods = document.getElementById('mod_count_maintained_mods');
+
+ if (modCount)
+ modCount.textContent = size;
+
+ if (modCountMaintainedMods)
+ modCountMaintainedMods.textContent = size;
+});
+</script>
diff --git a/apps/website/src/pages/oss.astro b/apps/website/src/pages/oss.astro
new file mode 100644
index 0000000..a54d929
--- /dev/null
+++ b/apps/website/src/pages/oss.astro
@@ -0,0 +1,147 @@
+---
+import Button from '@components/base/Button.astro';
+import Header from '@components/base/Header.astro';
+import Paragraph from '@components/base/Paragraph.astro';
+import Section from '@components/base/Section.astro';
+import configConst from '@config';
+import Layout from '@layouts/Layout.astro';
+import { Code } from 'astro:components';
+
+const leftCodeBlock = `public class MyConfig {
+
+ @Switch(
+ name = "Sub Switch",
+ category = "General"
+ )
+ public static boolean subSwitch = false;
+
+ @Dropdown(
+ name = "Sub Dropdown",
+ category = "General"
+ )
+ public static int subSwitch = 0;
+
+ @DualOption(
+ name = "Sub Dual Option",
+ category = "General"
+ )
+ public static int subDualOption = 0;
+
+ public MyConfig() {
+ super(new Mod("My Mod", ModType.UTIL_QOL), "config.json");
+ addDependency("subSwitch", () -> {
+ // Do stuff here
+ });
+ }
+}`;
+
+const rightCodeBlock = leftCodeBlock;
+
+---
+
+<Layout>
+ <Section maxWidth="1920px" wFull class="flex-row justify-center items-center h-screen md:min-h-[600px] relative">
+ <div class="codeblock_container -left-12">
+ <Code lang="java" theme="github-light" code={leftCodeBlock}></Code>
+ </div>
+ <div class="flex flex-col justify-center items-center gap-y-4">
+ <Header align="center" size="xxl" class="text-navy-peony max-w-[600px]">
+ Open Source, Forever
+ </Header>
+ <Paragraph class="max-w-[400px] lg:max-w-[600px] text-center text-navy-peony">
+ We believe it is the right of the user and developer to know what code they are trusting to run behind the scenes.
+ </Paragraph>
+ <Button iconLeft="github" href={configConst.socials.github} style="secondary">GitHub</Button>
+ </div>
+ <div class="codeblock_container after:-scale-x-125 -right-12">
+ <Code lang="java" theme="github-light" code={rightCodeBlock}></Code>
+ </div>
+ </Section>
+
+ <Section tabindex="0" colReverse={false}>
+ <div slot="left" class="flex justify-center">
+ <img class="max-sm:w-full w-64" src="/media/oss/page_media_1.svg" alt="stuff"/>
+ </div>
+
+ <div slot="right">
+ <Header size="xl" class="text-navy-peony">
+ Rooted from the developers
+ </Header>
+ <Paragraph size="md" class="text-gray-400 max-w-[500px]">
+ Our developers learned and built on open source for years. Many even made their own contributions on our projects before joining our team.
+ </Paragraph>
+ </div>
+ </Section>
+
+ <Section tabindex="0">
+ <div slot="left">
+ <Header size="xl" class="text-navy-peony">
+ Makes development faster
+ </Header>
+ <Paragraph size="md" class="text-gray-400 max-w-[500px]">
+ Open source lets us join forces with other developers in our community. This means new features and bug fixes come much faster, and way better.
+ </Paragraph>
+ </div>
+
+ <div slot="right" class="flex justify-center">
+ <img class="max-sm:w-full w-64" src="/media/oss/page_media_2.svg" alt="stuff"/>
+ </div>
+ </Section>
+
+ <Section tabindex="0" colReverse={false}>
+ <div slot="left" class="flex justify-center">
+ <img class="max-sm:w-full w-64" src="/media/oss/page_media_3.svg" alt="stuff"/>
+ </div>
+
+ <div slot="right">
+ <Header size="xl" class="text-navy-peony">
+ Makes our code safer
+ </Header>
+ <Paragraph size="md" class="text-gray-400 max-w-[500px]">
+ There's no definite way to prevent anything from becoming malicious. But, open sourcing our code brings extra eyes to catch, and fix exploits before they’re abused.
+ </Paragraph>
+ </div>
+ </Section>
+
+ <Section wrapperClass="flex justify-center items-center mb-40" class="flex-col justify-center items-center">
+ <div class="flex flex-col gap-y-1 relative justify-center items-center">
+ <Header size="xl" class="text-navy-peony text-header-page text-center">
+ Contribute to our GitHub!
+ </Header>
+ <div class="flex flex-row justify-center items-center gap-x-2">
+ <Button style="secondary" iconLeft="github" href={configConst.socials.github}>GitHub</Button>
+ </div>
+ </div>
+ </Section>
+</Layout>
+
+<style>
+ .codeblock_container {
+ position: absolute;
+ max-width: 20vw;
+ @apply max-md:hidden;
+
+ & :global(.astro-code) {
+ background-color: transparent !important;
+ border: none !important;
+ overflow: hidden !important;
+ position: relative;
+ border-radius: 0 !important;
+ opacity: 0.7;
+
+ & :global(.line::before) {
+ content: "";
+ display: none;
+ }
+ }
+
+ &::after {
+ content: "";
+ width: 100%;
+ height: 100%;
+ position: absolute;
+ top: 0;
+ background-image: linear-gradient(to right, rgba(255, 255, 255, 0), theme(colors.gray.50 / 75%) 90%, theme(colors.gray.50) 100%);
+ }
+ }
+</style>
diff --git a/apps/website/src/pages/projects/oneconfig/download.astro b/apps/website/src/pages/projects/oneconfig/download.astro
new file mode 100644
index 0000000..b8aee51
--- /dev/null
+++ b/apps/website/src/pages/projects/oneconfig/download.astro
@@ -0,0 +1,61 @@
+---
+import Button from '@components/base/Button.astro';
+import Header from '@components/base/Header.astro';
+import Paragraph from '@components/base/Paragraph.astro';
+import Section from '@components/base/Section.astro';
+import configConst from '@config';
+import Layout from '@layouts/Layout.astro';
+---
+
+<Layout>
+
+ <Section wrapperClass="mt-36 -mb-28">
+ <div class="text-navy-peony flex flex-col gap-y-2">
+ <Header>
+ OneConfig Download
+ </Header>
+ <Paragraph>
+ Thank you for your interest in OneConfig! As OneConfig is primarily a library for other mods, installing OneConfig can be done in multiple ways.
+ </Paragraph>
+ </div>
+ </Section>
+
+ <Section wFull maxWidth="1024px" wrapperClass="bg-blue-75" class="py-8">
+ <div slot="left" class="flex flex-col gap-y-2">
+ <Header class="text-blue-500">SkyClient</Header>
+ <Paragraph class="text-navy-peony whitespace-pre-line">
+ <b>This is the easiest way</b> for installing OneConfig with no experience in Forge or modding.
+
+ SkyClient is an open-source Forge mod installer which installs various mods that include OneConfig for you.
+
+ All you need to do is select the mods you want and click install, and OneConfig should be right there!
+ </Paragraph>
+ <div class="flex flex-row max-md:justify-center">
+ <Button size="sm" iconLeft="link-external" style="primary" href={configConst.socials.skyclient}>SkyClient</Button>
+ </div>
+ </div>
+ <div slot="right">
+ <img class="rounded-lg w-full max-md:max-w-screen-sm lg:max-w-none lg:w-[480px]" src="/media/oneconfig/skyclient.png" alt="A screenshot of skyclient">
+ </div>
+ </Section>
+
+ <Section wFull maxWidth="1024px" wrapperClass="-mt-32 mb-12" class="py-8">
+ <div slot="left" class="flex flex-col gap-y-2">
+ <Header class="text-blue-500">Mods</Header>
+ <Paragraph class="text-navy-peony whitespace-pre-line">If you already have a Forge installation, you can simply download any mod that includes OneConfig. Such mods include:
+
+ • Hytils Reborn
+ • Chatting
+ • Any Poly-Series mod (e.g PolyTime, PolyBlur)
+ • And more!
+ </Paragraph>
+ <div class="flex flex-row max-md:justify-center">
+ <Button size="sm" iconLeft="link-external" style="primary" href="/mods">Discover Mods</Button>
+ </div>
+ </div>
+ <div slot="right">
+ <img class="rounded-lg w-full max-md:max-w-screen-sm lg:max-w-none lg:w-[480px]" src="/media/oneconfig/page_media_4.png" alt="A screenshot of skyclient">
+ </div>
+ </Section>
+
+</Layout>
diff --git a/apps/website/src/pages/projects/oneconfig/index.astro b/apps/website/src/pages/projects/oneconfig/index.astro
new file mode 100644
index 0000000..e8283f3
--- /dev/null
+++ b/apps/website/src/pages/projects/oneconfig/index.astro
@@ -0,0 +1,171 @@
+---
+import Button from '@components/base/Button.astro';
+import Card from '@components/base/Card.astro';
+import Header from '@components/base/Header.astro';
+import Paragraph from '@components/base/Paragraph.astro';
+import Section from '@components/base/Section.astro';
+import Slider from '@components/base/Slider.astro';
+import Logo from '@components/logos/Logo.astro';
+
+import Layout from '@layouts/Layout.astro';
+
+import { Code } from 'astro:components';
+
+---
+
+<Layout>
+ <Section class="flex-col justify-center items-center h-screen md:min-h-[600px]">
+ <div class="flex flex-col justify-center items-center gap-y-4">
+ <Logo size={56} logo="oneconfig.minimal"/>
+ <Header align="center" size="xxl" class="max-w-[600px]">
+ Meet <b>OneConfig</b>, the library designed for <b>everyone</b>.
+ </Header>
+ <div class="flex flex-row justify-center items-center gap-2">
+ <Button href="/projects/oneconfig/download" iconLeft="download" text="Download"/>
+ <Button href="https://docs.polyfrost.org" iconLeft="book-open" style="secondary" text="Documentation"/>
+ </div>
+ </div>
+ </Section>
+
+ <Section tabindex="0">
+ <div slot="left">
+ <Header size="xl" class="text-navy-peony">Forge is complicated</Header>
+ <Paragraph size="md" class="text-gray-400 max-w-[500px]">Modding Minecraft has always been difficult, particularly with their configuration. Remembering all of the keybinds, commands; it just isn't intuitive.</Paragraph>
+ </div>
+ <div slot="right" class="w-3/4 max-w-80 md:max-w-none md:w-auto">
+ <img class="w-full md:w-[20rem]" src="/media/oneconfig/page_media_1.svg" alt="stuff"/>
+ </div>
+ </Section>
+
+ <Section tabindex="0" colReverse={false}>
+ <div slot="left" class="flex justify-center">
+ <img class="max-sm:w-full w-64" src="/media/oneconfig/page_media_2.svg" alt="stuff"/>
+ </div>
+
+ <div slot="right">
+ <Header size="xl" class="text-navy-peony">Clients are locked-down</Header>
+ <Paragraph size="md" class="text-gray-400 max-w-[500px]">While they improve usability, they're slow to adopt new mods absent from the community and force unwanted features onto users to profit off of them.</Paragraph>
+ </div>
+ </Section>
+
+ <Section tabindex="0">
+ <div slot="left">
+ <Header size="xl" class="text-navy-peony">Best of both worlds</Header>
+ <Paragraph size="md" class="text-gray-400 max-w-[500px]">OneConfig brings the simplicity of a client to the everyday user, gives advanced users and developers complete control over everything, while remaining free and open-source.</Paragraph>
+ </div>
+
+ <div slot="right" class="w-3/4 max-w-80 md:max-w-none md:w-auto flex justify-center">
+ <img class="w-full md:w-[20rem] lg:w-[30rem]" src="/media/oneconfig/page_media_3.svg" alt="stuff"/>
+ </div>
+ </Section>
+
+ <div class="section bg-blue-75 flex flex-col justify-center items-center min-h-screen">
+ <Section colReverse={false} maxWidth="1120px" wFull={false} class="pt-10 md:py-20 max-sm:h-screen">
+ <div slot="left">
+ <!-- TODO: FIX Codeblock overflowing on mobile -->
+ <div class="max-sm:hidden">
+ <Code
+ code={
+`public class MyConfig {
+ @Switch(
+ name = "Sub Switch",
+ category = "General"
+ )
+ public static boolean subSwitch = false;
+
+ public MyConfig() {
+ super(new Mod("My Mod", ModType.UTIL_QOL), "config.json");
+ addDependency("subSwitch", () -> {
+ // Do stuff here
+ });
+ }
+}`
+}
+ lang="java"/>
+ </div>
+ </div>
+
+ <div slot="right" class="flex flex-col gap-2 text-left items-start">
+ <Header size="xl" class="text-blue-500">Written for developers</Header>
+ <Paragraph class="text-blue-400 max-w-[500px]">
+ With our simple APIs and documentation, it's easier than ever to integrate your mods with OneConfig.
+ </Paragraph>
+ <div class="flex">
+ <Button href="https://docs.polyfrost.org" iconLeft="book-open" style="secondary" text="Documentation"/>
+ </div>
+ </div>
+ </Section>
+
+ <Section maxWidth="1120px" wFull={false} class="py-10 md:py-20 gap-4 max-sm:h-screen">
+ <div slot="left" class="flex flex-col gap-2 text-left items-start">
+ <Header size="xl" class="text-blue-500">Designed for users</Header>
+ <Paragraph class="text-blue-400 max-w-[500px]">
+ We take pride in having the cleanest and most intuitive UI of any mod, config library, or client out there.
+ </Paragraph>
+ <div class="flex">
+ <Button href="/projects/oneconfig/download" style="secondary" iconLeft="download" text="Download"/>
+ </div>
+ </div>
+ <div data-scroll data-scroll-speed="3" slot="right">
+ <img src="/media/oneconfig/page_media_4.png" class="max-h-[285px] rounded-2xl"/>
+ </div>
+ </Section>
+ </div>
+
+ <Section id="unified_hud_editor" class="flex-col justify-center items-center h-screen md:min-h-[600px]">
+ <img data-scroll data-scroll-sticky data-scroll-target="#unified_hud_editor" data-scroll-direction="horizontal" src="/media/oneconfig/page_media_5.png" class="max-h-[285px] md:max-h-96 lg:max-h-[581px] rounded-2xl"/>
+ <div data-scroll data-scroll-speed="2" class="flex flex-col justify-center items-center gap-y-4">
+ <Header size="xl" align="center" class="w-96">A unified HUD editor</Header>
+ <Paragraph class="w-96 text-center text-gray-400">
+ Thanks to OneConfig's HUD API, you can customize any OneConfig-powered HUD to your liking, without having to worry about the hassle of finding the right command or keybind.
+ </Paragraph>
+ </div>
+ </Section>
+
+ <Section wrapperClass="bg-blue-100 -mb-40" wFull maxWidth="none" class="py-10 md:py-20 gap-4 !px-0 flex flex-col items-center justify-center">
+ <div class="max-w-[1024px] w-full flex flex-col gap-2 text-left items-start px-5">
+ <Header size="xl" class="text-blue-500">With many fabulous mods</Header>
+ <Paragraph class="text-blue-400 max-w-[500px]">
+ Discover a wide range of mods integrated with OneConfig to enhance your experience.
+ </Paragraph>
+ <div class="flex items-start flex-col md:flex-row max-sm:gap-y-1 gap-x-1">
+ <!-- TODO: HREF -->
+ <Button iconLeft="link-external" href="/mods" style="secondary" text="Discover mods"/>
+ </div>
+ </div>
+ <div class="flex flex-col justify-center items-center bg-blue-100 pb-10 max-w-full overflow-x-hidden">
+ <div class="flex flex-col justify-between items-center overflow-x-hidden h-[290px] max-w-[1920px]">
+ <Slider wrapperClass="-mb-40 mb-2 bg-blue-100" childrenNum={8}>
+ <Card text="Chatting" icon="chatting"/>
+ <Card text="PolySprint" icon="polysprint"/>
+ <Card text="VanillaHUD" icon="vanillahud"/>
+ <Card text="OverflowAnimations" icon="overflowanimations"/>
+ <Card text="CrashPatch" icon="crashpatch"/>
+ <Card text="PolyTime" icon="polytime"/>
+ <Card text="PolyWeather" icon="polyweather"/>
+ <Card text="Keystrokes" icon="keystrokes"/>
+ </Slider>
+ <Slider dir="right" wrapperClass="bg-blue-100" childrenNum={8}>
+ <Card text="Chatting" icon="chatting"/>
+ <Card text="PolySprint" icon="polysprint"/>
+ <Card text="VanillaHUD" icon="vanillahud"/>
+ <Card text="OverflowAnimations" icon="overflowanimations"/>
+ <Card text="CrashPatch" icon="crashpatch"/>
+ <Card text="PolyTime" icon="polytime"/>
+ <Card text="PolyWeather" icon="polyweather"/>
+ <Card text="Keystrokes" icon="keystrokes"/>
+ </Slider>
+ </div>
+ </div>
+ </Section>
+
+ <Section class="flex-col justify-center items-center mb-20" hFull>
+ <div class="flex relative md:-left-12">
+ <img src="/media/oneconfig/page_media_4.png" class="rounded-2xl"/>
+ <div class="border border-gray-200 rounded-3xl md:rounded-4xl shadow-sm bg-gray-50 flex flex-col justify-center items-center md:items-start p-4 md:p-8 absolute -bottom-12 translate-x-1/2 right-1/2 md:translate-x-0 md:-right-12 gap-y-2 md:gap-y-8">
+ <Logo logo="oneconfig.logo_text" class="w-48 h-12 md:min-w-72 md:h-auto"></Logo>
+ <Button href="/projects/oneconfig/download" iconLeft="download" text="Download now" class="max-w-fit"/>
+ </div>
+ </div>
+ </Section>
+</Layout>
diff --git a/apps/website/src/pages/rss.xml.js b/apps/website/src/pages/rss.xml.js
new file mode 100644
index 0000000..fe05755
--- /dev/null
+++ b/apps/website/src/pages/rss.xml.js
@@ -0,0 +1,16 @@
+import rss from '@astrojs/rss';
+import { getCollection } from 'astro:content';
+
+export async function GET(context) {
+ const posts = await getCollection('blog');
+
+ return rss({
+ title: 'Polyfrost Blog',
+ description: 'Recieve Polyfrost updates here',
+ site: context.site,
+ items: posts.map(post => ({
+ ...post.data,
+ link: `/blog/${post.slug}/`,
+ })),
+ });
+}
diff --git a/apps/website/src/styles/blog.css b/apps/website/src/styles/blog.css
new file mode 100644
index 0000000..9cfe3fa
--- /dev/null
+++ b/apps/website/src/styles/blog.css
@@ -0,0 +1,37 @@
+main {
+ width: calc(100% - 2em);
+ max-width: 100%;
+ margin: 0;
+}
+.hero-image {
+ width: 100%;
+}
+.hero-image img {
+ display: block;
+ margin: 0 auto;
+ border-radius: 12px;
+ box-shadow: var(--box-shadow);
+}
+.prose {
+ width: 720px;
+ max-width: calc(100% - 2em);
+ margin: auto;
+ padding: 1em;
+ color: rgb(var(--gray-dark));
+}
+.title {
+ margin-bottom: 1em;
+ padding: 1em 0;
+ text-align: center;
+ line-height: 1;
+}
+.title h1 {
+ margin: 0 0 0.5em 0;
+}
+.date {
+ margin-bottom: 0.5em;
+ color: rgb(var(--gray));
+}
+.last-updated-on {
+ font-style: italic;
+}
diff --git a/apps/website/src/styles/global.css b/apps/website/src/styles/global.css
index 0bbfc2e..371d5e6 100644
--- a/apps/website/src/styles/global.css
+++ b/apps/website/src/styles/global.css
@@ -1,7 +1,11 @@
@tailwind base;
+@tailwind components;
+@tailwind utilities;
+@tailwind variants;
* {
font-family: 'Poppins', sans-serif;
+ -webkit-tap-highlight-color: transparent;
}
@layer base {
@@ -20,6 +24,67 @@
html,
body {
- @apply text-[14px] md:text-[16px];
+ @apply text-[15px] md:text-[16px] lg:text-[19px] /* overflow-hidden */;
}
+
+ a {
+ -webkit-user-drag: none;
+ }
+}
+
+/* [data-scroll-container], [data-scroll-section] {
+ transform-style: preserve-3d;
+ will-change: transform;
+ perspective: 1px;
+} */
+
+main {
+ @apply overflow-x-hidden;
+}
+
+/* Codeblocks */
+.astro-code {
+ padding: 10px;
+ border-radius: 16px;
+ border: 1px solid rgba(65, 74, 88, 1);
+ width: 100%;
+ line-height: 18px;
+}
+
+.astro-code code {
+ white-space: pre-wrap;
+ padding: 10px;
+ padding-bottom: 0;
+ color: #546E7A;
+}
+
+.astro-code code::before {
+ counter-reset: listing;
+}
+
+.astro-code code span {
+ font-family: 'Roboto Mono', monospace !important;
+}
+
+.astro-code code span.line {
+ counter-increment: listing;
+ text-align: left;
+ float: left;
+ clear: left;
+ font-size: 13px;
+ white-space: pre;
+}
+
+.astro-code code span.line::before {
+ content: counter(listing) " ";
+ display: inline-block;
+ float: left;
+ width: 2em;
+ padding: 0;
+ margin-left: auto;
+ margin-right: 1ch;
+ /* margin-right: 10px; */
+ text-align: right;
+ font-family: 'Roboto Mono', monospace !important;
+ font-size: 13px;
}
diff --git a/apps/website/src/types/Config.d.ts b/apps/website/src/types/Config.d.ts
index 2781b1b..870cb3c 100644
--- a/apps/website/src/types/Config.d.ts
+++ b/apps/website/src/types/Config.d.ts
@@ -1,34 +1,63 @@
-import { type configConst } from 'config';
+import type { configConst } from 'config';
export type LogoType = (typeof configConst.logos)[number];
+export interface ProjectDownload {
+ url: string,
+ platform?: "windows" | "mac" | "linux" | "universal",
+ architecture?: "x86" | "x64" | "arm" | "arm64" | "universal",
+}
+
export interface Project {
- name: string;
- description: string;
- logo?: LogoType;
- tag?: string;
+ name: string
+ description: string,
+ logo?: LogoType
+ tag?: string
+ downloads?: ProjectDownload[]
+ descriptionLong?: string,
+ hasPage?: boolean,
+}
+
+export interface NavbarDropdown {
+ name: string
+ description: string
+ path?: string
+ logo?: LogoType
+ tag?: string,
}
-export type NavbarDropdown = {
- name: string;
- description: string;
- path: string;
- logo?: LogoType;
- tag?: string;
-};
+export interface NavbarElement {
+ text?: string
+ logo?: [string, number]
+ path?: string
+ dropdown?: NavbarDropdown[]
+}
-export type NavbarElement = {
- text?: string;
- logo?: [string, number];
- path?: string;
- dropdown?: NavbarDropdown[];
-};
+export interface FooterColumn {
+ header: string
+ links: {
+ text: string,
+ url: string,
+ }[]
+}
export interface Config {
- projects: Project[];
- logos: string[];
+ projects: Project[],
+ logos: string[],
+ socials: {
+ youtube: string,
+ // twitter: string,
+ discord: string,
+ github: string,
+ modrinth: {
+ type: "user" | "organization",
+ id: string,
+ },
+ skyclient: string,
+ },
navbar: {
- left: NavbarElement[];
- right: NavbarElement[];
- };
+ left: NavbarElement[],
+ right: NavbarElement[],
+ },
+ footer: FooterColumn[],
}
diff --git a/apps/website/src/types/smartypants.d.ts b/apps/website/src/types/smartypants.d.ts
new file mode 100644
index 0000000..c61e268
--- /dev/null
+++ b/apps/website/src/types/smartypants.d.ts
@@ -0,0 +1,4 @@
+declare module 'smartypants' {
+ type Behavior = 0 | 1 | 2 | 3 | -1 | 'q' | 'b' | 'B' | 'd' | 'D' | 'i' | 'e' | 'w';
+ export default function smartypants(text: string, behavior: Behavior): string;
+}