diff --git a/app/components/ClientProviders.tsx b/app/components/ClientProviders.tsx index 93af8e9..b3cc013 100644 --- a/app/components/ClientProviders.tsx +++ b/app/components/ClientProviders.tsx @@ -15,7 +15,7 @@ const BackgroundBlobs = dynamic(() => import("@/components/BackgroundBlobs").cat }); const ShaderGradientBackground = dynamic( - () => import("./ShaderGradientBackground"), + () => import("./ShaderGradientBackground").catch(() => ({ default: () => null })), { ssr: false, loading: () => null } ); diff --git a/app/components/ConsentBanner.tsx b/app/components/ConsentBanner.tsx index 22f09dd..1ea4007 100644 --- a/app/components/ConsentBanner.tsx +++ b/app/components/ConsentBanner.tsx @@ -54,8 +54,6 @@ export default function ConsentBanner() { type="button" onClick={() => setMinimized(true)} className="shrink-0 text-xs text-stone-500 hover:text-stone-900 transition-colors" - aria-label="Minimize privacy banner" - title="Minimize" > {s.hide} diff --git a/app/components/ShaderGradientBackground.tsx b/app/components/ShaderGradientBackground.tsx index 8f7240c..0dd4df8 100644 --- a/app/components/ShaderGradientBackground.tsx +++ b/app/components/ShaderGradientBackground.tsx @@ -1,9 +1,23 @@ "use client"; -import React from "react"; +import React, { useEffect, useState } from "react"; import { ShaderGradientCanvas, ShaderGradient } from "@shadergradient/react"; const ShaderGradientBackground = () => { + const [supported, setSupported] = useState(true); + + useEffect(() => { + try { + const canvas = document.createElement("canvas"); + const gl = canvas.getContext("webgl") || canvas.getContext("experimental-webgl"); + if (!gl) setSupported(false); + } catch { + setSupported(false); + } + }, []); + + if (!supported) return null; + return (