47 lines
1.3 KiB
TypeScript
47 lines
1.3 KiB
TypeScript
import type { Metadata, Viewport } from 'next'
|
|
import { Inter } from 'next/font/google'
|
|
import './globals.css'
|
|
import { Providers } from './providers'
|
|
import { ErrorBoundary } from '@/components/error-boundary'
|
|
|
|
// Avoid SSG prerender failures (Apollo/client-only paths, lucide icons in server props).
|
|
export const dynamic = 'force-dynamic'
|
|
|
|
const inter = Inter({
|
|
subsets: ['latin'],
|
|
variable: '--font-inter',
|
|
})
|
|
|
|
export const metadata: Metadata = {
|
|
title: {
|
|
default: "Sankofa's Phoenix Nexus Cloud",
|
|
template: "%s | Sankofa's Phoenix Nexus Cloud",
|
|
},
|
|
description: 'The sovereign cloud born of fire and ancestral wisdom.',
|
|
metadataBase: new URL(process.env.NEXT_PUBLIC_APP_URL || 'http://localhost:3000'),
|
|
}
|
|
|
|
// Viewport configuration without maximum-scale and user-scalable for accessibility compliance
|
|
export const viewport: Viewport = {
|
|
width: 'device-width',
|
|
initialScale: 1,
|
|
// Note: maximum-scale and user-scalable removed per accessibility best practices
|
|
}
|
|
|
|
export default function RootLayout({
|
|
children,
|
|
}: {
|
|
children: React.ReactNode
|
|
}) {
|
|
return (
|
|
<html lang="en" className="dark">
|
|
<body className={`${inter.variable} font-sans antialiased`}>
|
|
<ErrorBoundary>
|
|
<Providers>{children}</Providers>
|
|
</ErrorBoundary>
|
|
</body>
|
|
</html>
|
|
)
|
|
}
|
|
|