diff --git a/src/lib/components/OnboardingModal.svelte b/src/lib/components/OnboardingModal.svelte
index ea80db9..a9a6f80 100644
--- a/src/lib/components/OnboardingModal.svelte
+++ b/src/lib/components/OnboardingModal.svelte
@@ -3,7 +3,7 @@
import WebGPUInstructions from './WebGPUInstructions.svelte';
import PaperViewer from './PaperViewer.svelte';
import MobileWarning from './MobileWarning.svelte';
- import { completeOnboarding, setConsent, getConsent } from '$lib/utils/consentStorage';
+ import { completeOnboarding, setConsent, getConsent, updateWebGPUAvailability } from '$lib/utils/consentStorage';
import { useWebGPUStatus } from '$lib/composables/useWebGPUStatus.svelte';
interface Props {
@@ -21,6 +21,16 @@
const webgpu = useWebGPUStatus();
+ // Gate: non-dismissable when WebGPU is unavailable
+ const gated = $derived(!webgpu.isDetecting && !webgpu.available);
+
+ // Update stored WebGPU availability when detection completes
+ $effect(() => {
+ if (!webgpu.isDetecting) {
+ updateWebGPUAvailability(webgpu.available);
+ }
+ });
+
// Track completed steps
let completedSteps = $state
+ The Pixelwise demos require a WebGPU-capable browser. Please go back to Step 2 for browser-specific instructions on enabling WebGPU, then click "Re-check". +
+