diff --git a/media/based-in-sweden-logo.png b/media/based-in-sweden-logo.png
new file mode 100644
index 0000000..d9eaa9d
Binary files /dev/null and b/media/based-in-sweden-logo.png differ
diff --git a/media/iso_sbcert.png b/media/iso_sbcert.png
new file mode 100644
index 0000000..ef80255
Binary files /dev/null and b/media/iso_sbcert.png differ
diff --git a/media/uc-sigill-lm-1200x1452.webp b/media/uc-sigill-lm-1200x1452.webp
new file mode 100644
index 0000000..0c97c50
Binary files /dev/null and b/media/uc-sigill-lm-1200x1452.webp differ
diff --git a/media/uc-sigill-lm-400x484.webp b/media/uc-sigill-lm-400x484.webp
new file mode 100644
index 0000000..4865281
Binary files /dev/null and b/media/uc-sigill-lm-400x484.webp differ
diff --git a/media/uc-sigill-lm-800x968.webp b/media/uc-sigill-lm-800x968.webp
new file mode 100644
index 0000000..2264f33
Binary files /dev/null and b/media/uc-sigill-lm-800x968.webp differ
diff --git a/media/uc-sigill-lm.png b/media/uc-sigill-lm.png
new file mode 100644
index 0000000..07af423
Binary files /dev/null and b/media/uc-sigill-lm.png differ
diff --git a/next.config.js b/next.config.js
index cb02c1f..aea3c4e 100644
--- a/next.config.js
+++ b/next.config.js
@@ -1,5 +1,4 @@
import { withPayload } from '@payloadcms/next/withPayload'
-
import redirects from './redirects.js'
const NEXT_PUBLIC_SERVER_URL = process.env.VERCEL_PROJECT_PRODUCTION_URL
@@ -8,12 +7,33 @@ const NEXT_PUBLIC_SERVER_URL = process.env.VERCEL_PROJECT_PRODUCTION_URL
const ContentSecurityPolicy = `
default-src 'self';
- script-src 'self' 'unsafe-inline' https://layerandmesh.lime-forms.com https://matomo.layermesh.se https://maps.googleapis.com;
- style-src 'self' 'unsafe-inline' https://layerandmesh.lime-forms.com https://fonts.googleapis.com;
- img-src 'self' data: blob: https://matomo.layermesh.se https://img.youtube.com https://i.vimeocdn.com https://maps.googleapis.com https://maps.gstatic.com;
- font-src 'self' https://fonts.gstatic.com;
- connect-src 'self' https://matomo.layermesh.se https://layerandmesh.lime-forms.com https://maps.googleapis.com;
- frame-src 'self' https://www.youtube.com https://www.youtube-nocookie.com https://player.vimeo.com https://www.google.com https://maps.google.com;
+ script-src 'self' 'unsafe-inline'
+ https://layerandmesh.lime-forms.com
+ https://matomo.layermesh.se
+ https://maps.googleapis.com
+ https://maps.gstatic.com;
+ style-src 'self' 'unsafe-inline'
+ https://layerandmesh.lime-forms.com;
+ img-src 'self' data: blob:
+ https://matomo.layermesh.se
+ https://img.youtube.com
+ https://*.vimeocdn.com
+ https://maps.googleapis.com
+ https://maps.gstatic.com;
+ font-src 'self';
+ connect-src 'self'
+ https://matomo.layermesh.se
+ https://layerandmesh.lime-forms.com
+ https://maps.googleapis.com
+ https://*.googleapis.com;
+ frame-src 'self'
+ https://www.youtube.com
+ https://www.youtube-nocookie.com
+ https://player.vimeo.com
+ https://www.google.com
+ https://maps.google.com;
+ worker-src 'self';
+ media-src 'self' https://player.vimeo.com;
object-src 'none';
base-uri 'self';
form-action 'self' https://layerandmesh.lime-forms.com;
@@ -26,6 +46,10 @@ const securityHeaders = [
key: 'Content-Security-Policy',
value: ContentSecurityPolicy.replace(/\s{2,}/g, ' ').trim(),
},
+ {
+ key: 'Strict-Transport-Security',
+ value: 'max-age=63072000; includeSubDomains',
+ },
{
key: 'X-Frame-Options',
value: 'SAMEORIGIN',
@@ -40,7 +64,7 @@ const securityHeaders = [
},
{
key: 'Permissions-Policy',
- value: 'camera=(), microphone=(), geolocation=()',
+ value: 'camera=(), microphone=(), geolocation=(), payment=(), usb=(), accelerometer=(), gyroscope=()',
},
]
@@ -52,9 +76,8 @@ const nextConfig = {
},
images: {
remotePatterns: [
- ...[NEXT_PUBLIC_SERVER_URL /* 'https://example.com' */].map((item) => {
+ ...[NEXT_PUBLIC_SERVER_URL].map((item) => {
const url = new URL(item)
-
return {
hostname: url.hostname,
protocol: url.protocol.replace(':', ''),
@@ -68,7 +91,6 @@ const nextConfig = {
'.js': ['.ts', '.tsx', '.js', '.jsx'],
'.mjs': ['.mts', '.mjs'],
}
-
return webpackConfig
},
reactStrictMode: true,
@@ -83,4 +105,4 @@ const nextConfig = {
},
}
-export default withPayload(nextConfig, { devBundleServerPackages: false })
+export default withPayload(nextConfig, { devBundleServerPackages: false })
\ No newline at end of file
diff --git a/src/Footer/Component.tsx b/src/Footer/Component.tsx
index ff942c6..45cf5ac 100644
--- a/src/Footer/Component.tsx
+++ b/src/Footer/Component.tsx
@@ -63,7 +63,7 @@ export async function Footer() {
{certMarks.length > 0 && (
-
+
{certMarks.map((mark, i) => {
const media = mark.image as Media | null | undefined
if (!media) return null
@@ -71,7 +71,7 @@ export async function Footer() {
)
@@ -81,14 +81,12 @@ export async function Footer() {
href={mark.linkUrl}
target="_blank"
rel="noopener noreferrer"
- className="opacity-80 hover:opacity-100 transition-opacity"
+ className="transition-opacity hover:opacity-80"
>
{imgEl}
) : (
-
- {imgEl}
-
+ {imgEl}
)
})}
@@ -125,7 +123,31 @@ export async function Footer() {
{/* Left + center: copyright text and legal nav links */}
-
{bottomLeft}
+ {/* Mobile-only cert marks — shown above copyright, hidden on sm+ (handled in top bar) */}
+ {certMarks.length > 0 && (
+
+ {certMarks.map((mark, i) => {
+ const media = mark.image as Media | null | undefined
+ if (!media) return null
+ const imgEl = (
+
+ )
+ return mark.linkUrl ? (
+
+ {imgEl}
+
+ ) : (
+
{imgEl}
+ )
+ })}
+
+ )}
+
{bottomLeft}
{navItems.length > 0 && (