import type { Metadata, Viewport } from 'next' import Script from 'next/script' import { PublicEnvScript } from 'next-runtime-env' import { BrandedLayout } from '@/components/branded-layout' import { generateThemeCSS } from '@/lib/branding/inject-theme' import { generateBrandedMetadata, generateStructuredData } from '@/lib/branding/metadata' import { PostHogProvider } from '@/app/_shell/providers/posthog-provider' import '@/app/_styles/globals.css' import { OneDollarStats } from '@/components/analytics/onedollarstats' import { isReactGrabEnabled, isReactScanEnabled } from '@/lib/core/config/feature-flags' import { HydrationErrorHandler } from '@/app/_shell/hydration-error-handler' import { QueryProvider } from '@/app/_shell/providers/query-provider' import { SessionProvider } from '@/app/_shell/providers/session-provider' import { ThemeProvider } from '@/app/_shell/providers/theme-provider' import { TooltipProvider } from '@/app/_shell/providers/tooltip-provider' import { season } from '@/app/_styles/fonts/season/season' export const viewport: Viewport = { width: 'device-width', initialScale: 1, maximumScale: 1, userScalable: false, themeColor: [ { media: '(prefers-color-scheme: light)', color: '#ffffff' }, { media: '(prefers-color-scheme: dark)', color: '#0c0c0c' }, ], } export const metadata: Metadata = generateBrandedMetadata() export default function RootLayout({ children }: { children: React.ReactNode }) { const structuredData = generateStructuredData() const themeCSS = generateThemeCSS() return (
{isReactScanEnabled && ( )} {isReactGrabEnabled && ( )} {isReactGrabEnabled && ( )} {/* Structured Data for SEO */} {/* Workspace layout dimensions: set CSS vars before hydration to avoid layout jump. IMPORTANT: These hardcoded values must stay in sync with stores/constants.ts We cannot use imports here since this is a blocking script that runs before React. */}