diff --git a/canvas/src/app/layout.tsx b/canvas/src/app/layout.tsx index 21ec7962..04786994 100644 --- a/canvas/src/app/layout.tsx +++ b/canvas/src/app/layout.tsx @@ -1,6 +1,22 @@ import type { Metadata } from "next"; +import { Inter, JetBrains_Mono } from "next/font/google"; import { cookies, headers } from "next/headers"; import "./globals.css"; + +// Self-hosted at build time → CSP-safe (font-src 'self' covers them +// because Next.js serves the .woff2 from /_next/static). Exposed as +// CSS variables so the mobile palette can reference them without +// importing this module. +const interFont = Inter({ + subsets: ["latin"], + display: "swap", + variable: "--font-inter", +}); +const monoFont = JetBrains_Mono({ + subsets: ["latin"], + display: "swap", + variable: "--font-jetbrains", +}); import { AuthGate } from "@/components/AuthGate"; import { CookieConsent } from "@/components/CookieConsent"; import { PurchaseSuccessModal } from "@/components/PurchaseSuccessModal"; @@ -79,7 +95,7 @@ export default async function RootLayout({ dangerouslySetInnerHTML={{ __html: themeBootScript }} /> -
+{hydrationError}
+ ++ Live A2A traffic across the workspace. +
++ {a.tag} +
+{a.desc}
+
+ {cfg}
+
+ );
+}
+
+function DetailMemory({ dark }: { dark: boolean }) {
+ const p = usePalette(dark);
+ return (
+ + {rootCount} workspace{rootCount === 1 ? "" : "s"} · live +
++ Theme, accent, and layout density. +
++ In workspace · Default +
++ Boots in ~3s. Tier {tier} permissions apply on first call. +
+