50 lines
1.2 KiB
TypeScript
50 lines
1.2 KiB
TypeScript
import "./globals.css";
|
|
|
|
import type { Metadata } from "next";
|
|
import type { ReactNode } from "react";
|
|
|
|
import { DM_Serif_Display, IBM_Plex_Sans, Sora } from "next/font/google";
|
|
|
|
import { AuthProvider } from "@/components/providers/AuthProvider";
|
|
import { QueryProvider } from "@/components/providers/QueryProvider";
|
|
|
|
export const metadata: Metadata = {
|
|
title: "OpenClaw Mission Control",
|
|
description: "A calm command center for every task.",
|
|
};
|
|
|
|
const bodyFont = IBM_Plex_Sans({
|
|
subsets: ["latin"],
|
|
display: "swap",
|
|
variable: "--font-body",
|
|
weight: ["400", "500", "600", "700"],
|
|
});
|
|
|
|
const headingFont = Sora({
|
|
subsets: ["latin"],
|
|
display: "swap",
|
|
variable: "--font-heading",
|
|
weight: ["500", "600", "700"],
|
|
});
|
|
|
|
const displayFont = DM_Serif_Display({
|
|
subsets: ["latin"],
|
|
display: "swap",
|
|
variable: "--font-display",
|
|
weight: ["400"],
|
|
});
|
|
|
|
export default function RootLayout({ children }: { children: ReactNode }) {
|
|
return (
|
|
<html lang="en">
|
|
<body
|
|
className={`${bodyFont.variable} ${headingFont.variable} ${displayFont.variable} min-h-screen bg-app text-strong antialiased`}
|
|
>
|
|
<AuthProvider>
|
|
<QueryProvider>{children}</QueryProvider>
|
|
</AuthProvider>
|
|
</body>
|
|
</html>
|
|
);
|
|
}
|