The "access denied" error you're encountering with **sessionStorage** could be caused by a more restrictive Content Security Policy (CSP) setting in Opera GX.

To resolve this issue, you can try modifying your SvelteKit app's CSP header to allow **sessionStorage**.

Here's how you can do this:

1. In your SvelteKit app's **src/routes/__layout.svelte** file, add the following line inside the **<head>** element:  
`<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; font-src 'self'; img-src 'self' data:; connect-src 'self'; frame-src 'self'; object-src 'none'; media-src 'self'; worker-src 'self'; base-uri 'self'; form-action 'self'; manifest-src 'self'; frame-ancestors 'none'; frame-src 'none'; child-src 'self'; frame-ancestors 'none'; frame-src 'none'; sandbox allow-scripts allow-popups allow-forms allow-modals;">`  
Note that the above line contains the default CSP header for SvelteKit. You'll need to modify it according to your specific needs.  

2. Add **'unsafe-eval'** to the **script-src** directive, like this:  
`<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; font-src 'self'; img-src 'self' data:; connect-src 'self'; frame-src 'self'; object-src 'none'; media-src 'self'; worker-src 'self'; base-uri 'self'; form-action 'self'; manifest-src 'self'; frame-ancestors 'none'; frame-src 'none'; child-src 'self'; frame-ancestors 'none'; frame-src 'none'; sandbox allow-scripts allow-popups allow-forms allow-modals;">`

3. Add **'unsafe-hashes'** to the **script-src** directive, like this:  
`<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' 'unsafe-hashes'; style-src 'self' 'unsafe-inline'; font-src 'self'; img-src 'self' data:; connect-src 'self'; frame-src 'self'; object-src 'none'; media-src 'self'; worker-src 'self'; base-uri 'self'; form-action 'self'; manifest-src 'self'; frame-ancestors 'none'; frame-src 'none'; child-src 'self'; frame-ancestors 'none'; frame-src 'none'; sandbox allow-scripts allow-popups allow-forms allow-modals;">`

4. Add **'unsafe-inline'** to the **style-src** directive, like this:  
`<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' 'unsafe-hashes'; style-src 'self' 'unsafe-inline'; font-src 'self'; img-src 'self' data:; connect-src 'self'; frame-src 'self'; object-src 'none'; media-src 'self'; worker-src 'self'; base-uri 'self'; form-action 'self'; manifest-src 'self'; frame-ancestors 'none'; frame-src 'none'; child-src 'self'; frame-ancestors 'none'; frame-src 'none'; sandbox allow-scripts allow-popups allow-forms allow-modals;">`

5. Add **'unsafe-inline'** to the **child-src** directive, like this:  
`<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' 'unsafe-hashes'; style-src 'self' 'unsafe-inline'; font-src 'self'; img-src 'self' data:; connect-src 'self'; frame-src 'self'; object-src 'none'; media-src 'self'; worker-src 'self'; base-uri 'self'; form-action 'self'; manifest-src 'self'; frame-ancestors 'none'; frame-src 'none'; child-src 'self' 'unsafe-inline'; frame-ancestors 'none'; frame-src 'none'; sandbox allow-scripts allow-popups allow-forms allow-modals;">`

6. Finally, add **'unsafe-inline'** to the **connect-src** directive, like this:  
`<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' 'unsafe-hashes'; style-src 'self' 'unsafe-inline'; font-src 'self'; img-src 'self' data:; connect-src 'self' 'unsafe-inline'; frame-src 'self'; object-src 'none'; media-src 'self'; worker-src 'self'; base-uri 'self'; form-action 'self'; manifest-src 'self'; frame-ancestors 'none'; frame-src 'none'; child-src 'self' 'unsafe-inline'; frame-ancestors 'none'; frame-src 'none'; sandbox allow-scripts allow-popups allow-forms allow-modals;">`  
The above CSP header allows for **sessionStorage** to be used in your SvelteKit app in Opera GX.

Once you've added this CSP header to your app, clear your browser cache and try running your app again in Opera GX. **sessionStorage** should now work without any "access denied" errors.
spam fails_task lang_mismatch pii not_appropriate hate_speech sexual_content quality toxicity humor helpfulness creativity violence