Files
landing_page/refer_landing_page/app/layout.tsx
T

54 lines
1.7 KiB
TypeScript

import type { Metadata } from "next";
import "./globals.css";
import Header from "@/components/Header";
import Footer from "@/components/Footer";
export const metadata: Metadata = {
title: {
default: "ANL · AI 에이전트 네트워크 연구실",
template: "%s | ANL · 경북대학교",
},
description:
"경북대학교 컴퓨터학부 AI 에이전트 네트워크 연구실 (ANL). QUIC, gRPC, A2A 기반 에이전트 통신 및 멀티에이전트 오케스트레이션 연구.",
};
const themeScript = `
(function() {
try {
var storedTheme = localStorage.getItem('theme');
var supportDarkMode = window.matchMedia('(prefers-color-scheme: dark)').matches;
if (storedTheme === 'dark' || (!storedTheme && supportDarkMode)) {
document.documentElement.classList.add('dark');
document.documentElement.setAttribute('data-theme', 'dark');
} else {
document.documentElement.classList.remove('dark');
document.documentElement.setAttribute('data-theme', 'light');
}
} catch (e) {}
})();
`;
export default function RootLayout({
children,
}: {
children: React.ReactNode;
}) {
return (
<html lang="ko">
<head>
<script dangerouslySetInnerHTML={{ __html: themeScript }} />
{/* No-JS fallback for the .reveal scroll-reveal: without this, every
page is blank if hydration fails (e.g. Google Fonts request blocked). */}
<noscript>
<style>{`.reveal { opacity: 1 !important; transform: none !important; }`}</style>
</noscript>
</head>
<body className="flex min-h-screen flex-col">
<Header />
<main className="w-full flex-1">{children}</main>
<Footer />
</body>
</html>
);
}