import type { Metadata, Viewport } from "next"; import type { CSSProperties } from "react"; import "./globals.css"; import { Geist } from "next/font/google"; import { cn } from "@/lib/utils"; import { OfflineIndicator } from "@/components/ui/offline-indicator"; import { Toaster } from "@/components/ui/toast"; import { getPublicBranding } from "@/server/branding/runtime"; const geist = Geist({ subsets: ["latin"], variable: "--font-geist-sans" }); export function generateMetadata(): Metadata { const branding = getPublicBranding(); return { title: { default: branding.applicationName, template: `%s ยท ${branding.applicationName}` }, description: "Self-hosted freelancer operating dashboard", manifest: "/manifest.webmanifest", icons: branding.iconUrl ? { icon: branding.iconUrl, apple: branding.iconUrl } : undefined, appleWebApp: { capable: true, statusBarStyle: "default", title: branding.shortName, }, }; } export function generateViewport(): Viewport { return { themeColor: getPublicBranding().primaryColor }; } export default function RootLayout({ children, }: Readonly<{ children: React.ReactNode; }>) { const branding = getPublicBranding(); return ( {children} ); }