diff --git a/frontend/apps/artcraft/app/src/components/reusable/ConfirmationModal.tsx b/frontend/apps/artcraft/app/src/components/reusable/ConfirmationModal.tsx
--- a/frontend/apps/artcraft/app/src/components/reusable/ConfirmationModal.tsx
+++ b/frontend/apps/artcraft/app/src/components/reusable/ConfirmationModal.tsx
@@ -33,7 +33,11 @@ export const ConfirmationModal = ({
     const element = document.getElementById("hide-dialog");
     if (element) {
       if ((element as HTMLInputElement).checked) {
-        localStorage.setItem(title.replace(" ", "-"), DoNotShow);
+        try {
+          localStorage.setItem(title.replace(" ", "-"), DoNotShow);
+        } catch {
+          // ignore storage access errors
+        }
       }
     }
 
diff --git a/frontend/apps/artcraft/app/src/components/signaled/TopBar/TaskQueue.tsx b/frontend/apps/artcraft/app/src/components/signaled/TopBar/TaskQueue.tsx
--- a/frontend/apps/artcraft/app/src/components/signaled/TopBar/TaskQueue.tsx
+++ b/frontend/apps/artcraft/app/src/components/signaled/TopBar/TaskQueue.tsx
@@ -512,8 +512,12 @@ export const TaskQueue = () => {
   const [completed, setCompleted] = useState<CompletedTask[]>([]);
   const [failed, setFailed] = useState<FailedTask[]>([]);
   const [lastReadAt, setLastReadAt] = useState<number>(() => {
-    const stored = localStorage.getItem("taskQueueLastReadAt");
-    return stored ? parseInt(stored, 10) : 0;
+    try {
+      const stored = localStorage.getItem("taskQueueLastReadAt");
+      return stored ? parseInt(stored, 10) : 0;
+    } catch {
+      return 0;
+    }
   });
 
   // remove unread state; unread tracking handled via IDs below
@@ -933,7 +937,11 @@ export const TaskQueue = () => {
     if (open) {
       const now = Date.now();
       setLastReadAt(now);
-      localStorage.setItem("taskQueueLastReadAt", String(now));
+      try {
+        localStorage.setItem("taskQueueLastReadAt", String(now));
+      } catch {
+        // ignore storage access errors
+      }
       setUnreadCompletedIds([]);
     }
   };
diff --git a/frontend/apps/artcraft/app/src/index.tsx b/frontend/apps/artcraft/app/src/index.tsx
--- a/frontend/apps/artcraft/app/src/index.tsx
+++ b/frontend/apps/artcraft/app/src/index.tsx
@@ -54,7 +54,12 @@ const GlobalSettingsManager = ({ env }: { env: Record<string, string> }) => {
   // Apply stored theme early on mount
   useEffect(() => {
     const key = "st-theme";
-    const value = (localStorage.getItem(key) || "gray").trim();
+    let value = "gray";
+    try {
+      value = (localStorage.getItem(key) || "gray").trim();
+    } catch {
+      // ignore storage access errors
+    }
     const allowed = ["light", "gray", "black", "aurora", "sunset", "gradient"];
     const normalized = value === "gradient" ? "aurora" : value;
     const theme = allowed.includes(value) ? (normalized as string) : "gray";
