import type { Metadata, Viewport } from "next"; import Script from "next/script"; import { Cal_Sans, Geist_Mono, Bricolage_Grotesque } from "next/font/google"; import localFont from "next/font/local"; import { Toaster } from "@/components/ui/sonner"; import { SiteHeader } from "@/components/site-header"; import { SiteTopBanner } from "@/components/site-top-banner"; import { ListeCekmecesiLazy } from "@/features/liste/components/liste-cekmecesi-lazy"; import { KaydetBannerLazy } from "@/features/liste/components/kaydet-banner-lazy"; import { TercihProfiliKapisiLazy } from "@/features/liste/components/tercih-profili-kapisi-lazy"; import { HeaderGate } from "@/components/header-gate"; import { DevPanelMount } from "@/components/dev/dev-panel-mount"; import { JsonLd, organizationJsonLd, webSiteJsonLd, SITE_URL } from "@/lib/seo"; import "./globals.css"; const calSans = Cal_Sans({ variable: "--font-cal-sans", weight: "400", subsets: ["latin", "latin-ext"], }); const clarityCity = localFont({ variable: "--font-clarity-city", src: [ { path: "../fonts/ClarityCity-Regular.woff2", weight: "400" }, { path: "../fonts/ClarityCity-Medium.woff2", weight: "500" }, { path: "../fonts/ClarityCity-SemiBold.woff2", weight: "600" }, { path: "../fonts/ClarityCity-Bold.woff2", weight: "700" }, { path: "../fonts/ClarityCity-ExtraBold.woff2", weight: "800" }, ], }); const geistMono = Geist_Mono({ variable: "--font-geist-mono", subsets: ["latin"], // Yalnızca markdown/kod bloklarında kullanılıyor; landing'de preload israfı preload: false, }); const bricolage = Bricolage_Grotesque({ variable: "--font-bricolage-grotesque", subsets: ["latin", "latin-ext"], axes: ["opsz"], }); export const metadata: Metadata = { metadataBase: new URL(SITE_URL), title: { default: "KolayTercih — Yapay Zekâ Destekli YKS Tercih Danışmanı", template: "%s — KolayTercih", }, description: "YKS sıralamana göre gerçek YÖK Atlas verisiyle dengeli 24 tercihlik liste. İnsan danışmandan çok daha düşük fiyata, yapay zekâ destekli tercih danışmanlığı.", applicationName: "KolayTercih", openGraph: { type: "website", locale: "tr_TR", siteName: "KolayTercih", url: "/", title: "KolayTercih — Yapay Zekâ Destekli YKS Tercih Danışmanı", description: "YKS sıralamana göre gerçek YÖK Atlas verisiyle dengeli 24 tercihlik liste. Yapay zekâ destekli tercih danışmanlığı.", }, twitter: { card: "summary_large_image" }, robots: { index: true, follow: true }, }; export const viewport: Viewport = { themeColor: "#f8fafc", }; export default function RootLayout({ children, }: Readonly<{ children: React.ReactNode; }>) { return ( {/* Site geneli progressive blur — üst ve alt. Stil globals.css'te (.kt-sayfa-blur): iOS/iPadOS'ta fixed + backdrop-filter katmanı kaydırmada ekranın ortasına kayıyor, orada bulanıklık @supports ile düşürülüp degrade fade korunuyor. */}
{children}
{/* Manuel 24'lük liste çekmecesi + "+" uçuş katmanı (navbar'dan açılır) */} {/* Girişsiz + 3 seçimli kullanıcıya "listen yalnızca bu tarayıcıda" banner'ı */} {/* İlk "+" için sıra + sihirbaz kapısı */} {/* Dev süperadmin paneli — prod build'de modül grafiğine bile girmez */} {process.env.NODE_ENV !== "production" ? : null} {/* Rybbit analitik — afterInteractive: hydration sonrası client'ta enjekte edilir, LCP/kritik yolla yarışmaz. Yalnızca prod build'de: Rybbit localhost'u da takip ettiği için dev trafiği prod verisini kirletmesin (DevPanel ile aynı kapı). mask-patterns: /sonuc URL'i ham başarı sıralamasını, /odeme/sonuc sipariş kimliğini taşıyor. */} {process.env.NODE_ENV === "production" ? (