import type { Metadata } from "next"; import { Geist, Geist_Mono } from "next/font/google"; import { ViewTransition } from "react"; import { FeedbackHost } from "@/app/_components/feedback-host"; import { FeedbackProvider } from "@/app/_components/feedback-provider"; import "./globals.css"; const geistSans = Geist({ variable: "--font-geist-sans", subsets: ["latin"], }); const geistMono = Geist_Mono({ variable: "--font-geist-mono", subsets: ["latin"], }); // 관리자 사이트 전체(로그인 포함)의 검색엔진 색인을 차단한다 — 하위 라우트는 별도 설정이 // 없는 한 이 값을 그대로 상속한다. robots.txt(app/robots.ts), next.config.ts의 // X-Robots-Tag 헤더와 함께 SEO 차단 3층 구조를 이룬다. export const metadata: Metadata = { title: "에듀페이 관리자", robots: { index: false, follow: false, nocache: true, googleBot: { index: false, follow: false, noimageindex: true, "max-image-preview": "none", "max-snippet": 0, "max-video-preview": 0, }, }, }; export default function RootLayout({ children, }: Readonly<{ children: React.ReactNode; }>) { return ( {/* 라우트 그룹 간 이동을 포함한 모든 전환에 크로스페이드를 적용한다. 클래스명(layout-transition)에 대한 `::view-transition-old/new` 규칙은 design 레인이 app/globals.css에 제공한다 — 합류 전에는 브라우저 기본 크로스페이드로 동작한다. */} {children} {/* 피드백 오버레이는 전환 크로스페이드 대상이 아니므로 ViewTransition 바깥에 둔다. */} ); }