Repository Public
1import type { Metadata, Viewport } from 'next';2import { GeistSans } from 'geist/font/sans';3import '@fontsource/jetbrains-mono/400.css';4import '@fontsource/jetbrains-mono/500.css';5import '@fontsource/jetbrains-mono/700.css';6import './globals.css';7import { Providers } from '@/components/providers';89/*10 * Static defaults (the Claude product). The product name is resolved at RUN TIME (lib/branding.ts):11 * /theme-init.js and the branding store rewrite the title / PWA title for a Codex instance, and the12 * server serves that instance's /manifest.webmanifest and /icons/* from out/brand/codex/.13 */14export const metadata: Metadata = {15 title: 'Claude Remote',16 description: 'Claude Remote — MacLustr Command Center',17 manifest: '/manifest.webmanifest',18 robots: { index: false, follow: false },19 icons: {20 icon: [21 { url: '/icons/icon.svg', type: 'image/svg+xml' },22 { url: '/icons/icon-192.png', sizes: '192x192', type: 'image/png' },23 ],24 apple: [{ url: '/icons/apple-touch-icon.png', sizes: '180x180' }],25 },26 appleWebApp: { capable: true, title: 'Claude Remote', statusBarStyle: 'black-translucent' },27 formatDetection: { telephone: false, email: false, address: false },28 other: { 'mobile-web-app-capable': 'yes' },29};3031export const viewport: Viewport = {32 width: 'device-width',33 initialScale: 1,34 viewportFit: 'cover',35 interactiveWidget: 'resizes-content',36 themeColor: '#F7F6F3', // light default; /theme-init.js and the theme store update it37 colorScheme: 'light dark',38};3940export default function RootLayout({ children }: { children: React.ReactNode }) {41 return (42 <html lang="en" className={GeistSans.variable} data-theme="light" suppressHydrationWarning>43 <head>44 {/* Blocking, same-origin: sets data-theme before first paint (the CSP forbids inline scripts). */}45 {/* eslint-disable-next-line @next/next/no-sync-scripts */}46 <script src="/theme-init.js" />47 </head>48 <body>49 <Providers>{children}</Providers>50 </body>51 </html>52 );53}54