diff --git a/apps/sim/app/invite/components/status-card.tsx b/apps/sim/app/invite/components/status-card.tsx
index 12b23bcef1..f61c3c486c 100644
--- a/apps/sim/app/invite/components/status-card.tsx
+++ b/apps/sim/app/invite/components/status-card.tsx
@@ -5,6 +5,7 @@ import { CheckCircle2, Mail, RotateCcw, ShieldX, UserPlus, Users2 } from 'lucide
import { useRouter } from 'next/navigation'
import { Button } from '@/components/ui/button'
import { LoadingAgent } from '@/components/ui/loading-agent'
+import { useBrandConfig } from '@/lib/branding/branding'
import { inter } from '@/app/fonts/inter'
import { soehne } from '@/app/fonts/soehne/soehne'
@@ -57,6 +58,7 @@ export function InviteStatusCard({
}: InviteStatusCardProps) {
const router = useRouter()
const [buttonClass, setButtonClass] = useState('auth-button-gradient')
+ const brandConfig = useBrandConfig()
useEffect(() => {
const checkCustomBrand = () => {
@@ -116,11 +118,6 @@ export function InviteStatusCard({
return (
- {IconComponent && (
-
-
-
- )}
{title}
{description}
@@ -172,7 +169,7 @@ export function InviteStatusCard({
>
Need help?{' '}
Contact support
diff --git a/apps/sim/app/not-found.tsx b/apps/sim/app/not-found.tsx
new file mode 100644
index 0000000000..8c6792019c
--- /dev/null
+++ b/apps/sim/app/not-found.tsx
@@ -0,0 +1,90 @@
+'use client'
+
+import { useEffect, useState } from 'react'
+import Link from 'next/link'
+import { Button } from '@/components/ui/button'
+import { useBrandConfig } from '@/lib/branding/branding'
+import AuthBackground from '@/app/(auth)/components/auth-background'
+import Nav from '@/app/(landing)/components/nav/nav'
+
+function isColorDark(hexColor: string): boolean {
+ const hex = hexColor.replace('#', '')
+ const r = Number.parseInt(hex.substring(0, 2), 16)
+ const g = Number.parseInt(hex.substring(2, 4), 16)
+ const b = Number.parseInt(hex.substring(4, 6), 16)
+ const luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255
+ return luminance < 0.5
+}
+
+export default function NotFound() {
+ const [buttonClass, setButtonClass] = useState('auth-button-gradient')
+ const brandConfig = useBrandConfig()
+
+ useEffect(() => {
+ const rootStyle = getComputedStyle(document.documentElement)
+ const brandBackground = rootStyle.getPropertyValue('--brand-background-hex').trim()
+
+ if (brandBackground && isColorDark(brandBackground)) {
+ document.body.classList.add('auth-dark-bg')
+ } else {
+ document.body.classList.remove('auth-dark-bg')
+ }
+ }, [])
+
+ useEffect(() => {
+ const checkCustomBrand = () => {
+ const computedStyle = getComputedStyle(document.documentElement)
+ const brandAccent = computedStyle.getPropertyValue('--brand-accent-hex').trim()
+ if (brandAccent && brandAccent !== '#6f3dfa') {
+ setButtonClass('auth-button-custom')
+ } else {
+ setButtonClass('auth-button-gradient')
+ }
+ }
+ checkCustomBrand()
+ window.addEventListener('resize', checkCustomBrand)
+ const observer = new MutationObserver(checkCustomBrand)
+ observer.observe(document.documentElement, {
+ attributes: true,
+ attributeFilter: ['style', 'class'],
+ })
+ return () => {
+ window.removeEventListener('resize', checkCustomBrand)
+ observer.disconnect()
+ }
+ }, [])
+
+ return (
+
+
+ {/* Header */}
+
+
+ {/* Content */}
+
+
+
404
+
+
+
+
+
+
+
+
+
+ )
+}