diff --git a/packages/i18n/strings/en.json b/packages/i18n/strings/en.json
index 838c434d0..e9b37e735 100644
--- a/packages/i18n/strings/en.json
+++ b/packages/i18n/strings/en.json
@@ -1,12 +1,4 @@
{
- "error": {
- "heading": "BlitzKit ran into a critical error",
- "message": "Sorry about the inconvenience! You have a couple of options.",
- "view": "View error",
- "reload": "Reload",
- "support": "Support"
- },
-
"nations": {
"0": "Unspecified",
"1": "USSR",
diff --git a/packages/website-ue/src/components/ErrorDisplay.astro b/packages/website-ue/src/components/ErrorDisplay.astro
deleted file mode 100644
index 297ee5f16..000000000
--- a/packages/website-ue/src/components/ErrorDisplay.astro
+++ /dev/null
@@ -1,72 +0,0 @@
----
-import { api } from "../api/dynamic";
-import { discordLink } from "../config/socials";
-import { Button } from "./Button";
-import { Heading } from "./Heading";
-import { Link } from "./Link";
-import { Text } from "./Text";
-
-interface Props {
- locale: string;
-}
-
-const { locale } = Astro.props;
-const strings = await api.strings(locale);
----
-
-
-
-
-
- {strings.error.heading}
- {strings.error.message}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/packages/website-ue/src/components/ErrorWrapper.tsx b/packages/website-ue/src/components/ErrorWrapper.tsx
deleted file mode 100644
index ed4c7ab90..000000000
--- a/packages/website-ue/src/components/ErrorWrapper.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-import type { ReactNode } from "react";
-import { ErrorBoundary } from "react-error-boundary";
-
-interface Props {
- children: ReactNode;
-}
-
-export function ErrorWrapper({ children }: Props) {
- return (
- {
- console.log("what?");
- document.body.classList.add("error");
- }}
- >
- {children}
-
- );
-}
diff --git a/packages/website-ue/src/components/ErrorWrapper/index.module.css b/packages/website-ue/src/components/ErrorWrapper/index.module.css
new file mode 100644
index 000000000..59887ee46
--- /dev/null
+++ b/packages/website-ue/src/components/ErrorWrapper/index.module.css
@@ -0,0 +1,55 @@
+.error-display {
+ z-index: 1;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+
+ gap: var(--space-4);
+ padding: var(--space-4);
+ box-sizing: border-box;
+
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100dvw;
+ height: 100dvh;
+
+ text-align: center;
+ background-color: var(--gray-1);
+
+ .info {
+ display: flex;
+ align-items: center;
+ flex-direction: column;
+
+ gap: var(--space-3);
+ }
+
+ .error {
+ text-align: left;
+ overflow: hidden;
+ position: relative;
+ box-sizing: border-box;
+
+ max-width: min(100%, var(--page-width));
+
+ .cover {
+ position: absolute;
+ right: 0;
+ top: 0;
+
+ width: 25%;
+ height: 100%;
+
+ background: linear-gradient(90deg, transparent, var(--gray-1));
+ }
+ }
+
+ .options {
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: center;
+ gap: var(--space-3);
+ }
+}
diff --git a/packages/website-ue/src/components/ErrorWrapper/index.tsx b/packages/website-ue/src/components/ErrorWrapper/index.tsx
new file mode 100644
index 000000000..9e57abee7
--- /dev/null
+++ b/packages/website-ue/src/components/ErrorWrapper/index.tsx
@@ -0,0 +1,84 @@
+import { useState, type ReactNode } from "react";
+import {
+ ErrorBoundary,
+ getErrorMessage,
+ type FallbackProps,
+} from "react-error-boundary";
+import { discordLink } from "../../config/socials";
+import { Button } from "../Button";
+import { Code } from "../Code";
+import { Heading } from "../Heading";
+import { Link } from "../Link";
+import { Text } from "../Text";
+import styles from "./index.module.css";
+
+interface Props {
+ children: ReactNode;
+}
+
+export function ErrorWrapper({ children }: Props) {
+ return (
+ }>
+ {children}
+
+ );
+}
+
+function Fallback({ error, resetErrorBoundary }: FallbackProps) {
+ const [showError, setShowError] = useState(false);
+
+ let body: string | undefined;
+
+ if (error instanceof Error) {
+ body = error.stack || getErrorMessage(error);
+ } else {
+ body = getErrorMessage(error);
+ }
+
+ body ??= "No error message";
+
+ return (
+
+
+ BlitzKit crashed
+ Sorry about that! You have a couple of options.
+
+
+ {showError && (
+
+ {body}
+
+
+ )}
+
+
+ {!showError && (
+
+ )}
+
+ {showError && (
+
+ )}
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/packages/website-ue/src/components/TankopediaLoadout/index.tsx b/packages/website-ue/src/components/TankopediaLoadout/index.tsx
index 075228b31..b1cc21a1e 100644
--- a/packages/website-ue/src/components/TankopediaLoadout/index.tsx
+++ b/packages/website-ue/src/components/TankopediaLoadout/index.tsx
@@ -136,10 +136,6 @@ function EquipmentOption({
state.protagonist.equipment[equipmentIndex] === optionIndex,
);
- if (typeof window !== "undefined") {
- throw "test error";
- }
-
return (
-
-