1import type { Metadata } from "next";
2import { Space_Grotesk, Space_Mono, Unbounded } from "next/font/google";
3import { DeferredToaster } from "@/components/ui/deferred-toaster";
4import "./globals.css";
5
6const unbounded = Unbounded({
7 variable: "--font-unbounded",
8 subsets: ["latin"],
9 weight: ["700", "800", "900"],
10 /* M9 menguji `display: "optional"` untuk mengejar LCP Welcome (PRD §8):
11 hasilnya tidak berbeda (median 3,17 detik berbanding 3,16 detik) karena
12 yang menahan LCP adalah biaya gambar judul hero plus rebutan lebar pita
13 dengan bundel JS, bukan penggantian fonnya. Pengaturannya dikembalikan ke
14 bawaan (`swap`) supaya tipografi merek tidak turun ke fon cadangan di
15 kunjungan pertama yang lambat; selisih dan rencananya ada di
16 docs/DECISIONS.md (M9). */
17});
18
19const spaceGrotesk = Space_Grotesk({
20 variable: "--font-space-grotesk",
21 subsets: ["latin"],
22 weight: ["500", "700"],
23});
24
25const spaceMono = Space_Mono({
26 variable: "--font-space-mono",
27 subsets: ["latin"],
28 weight: ["400", "700"],
29});
30
31export const metadata: Metadata = {
32 title: "snapme",
33 description:
34 "Photobooth di browser: foto, hias strip, lalu unduh atau cetak. Tanpa akun.",
35};
36
37export default function RootLayout({ children }: LayoutProps<"/">) {
38 return (
39 <html
40 lang="id"
41 className={`${unbounded.variable} ${spaceGrotesk.variable} ${spaceMono.variable} h-full antialiased`}
42 >
43 <body className="min-h-full flex flex-col">
44 {children}
45 <DeferredToaster />
46 </body>
47 </html>
48 );
49}
50