import './globals.css'; import { ThemeProvider } from '../components/ThemeProvider.jsx'; import SupportChat from '../components/SupportChat.jsx'; import VisitTracker from '../components/VisitTracker.jsx'; const SITE_URL = process.env.NEXT_PUBLIC_SITE_URL || 'https://top-sysops.ru'; export const metadata = { metadataBase: new URL(SITE_URL), title: { default: 'TopSysOps — IT-аутсорсинг и автоматизация', template: '%s | TopSysOps', }, description: 'Профессиональный IT-аутсорсинг: техподдержка, кибербезопасность, администрирование БД, сетевая инфраструктура, ИИ и автоматизация.', }; // Выставляет класс "dark" на ДО гидратации React, чтобы не было // мигания светлой темы при заходе пользователя с сохранённой тёмной темой. const NO_FLASH_SCRIPT = ` (function () { try { var theme = localStorage.getItem('ts-theme'); var dark = theme ? theme === 'dark' : window.matchMedia('(prefers-color-scheme: dark)').matches; if (dark) document.documentElement.classList.add('dark'); } catch (e) {} })(); `; // Organization/LocalBusiness JSON-LD намеренно НЕ рендерится здесь: root layout // в этом проекте частично запекается в статическую оболочку на этапе сборки // (когда бэкенд ещё недоступен), и любые fetch-данные отсюда попадают в HTML // устаревшими навсегда, даже с revalidate. Каждая страница вызывает // getOrganizationSchema() сама - там это надёжно ревалидируется на каждый запрос. export default function RootLayout({ children }) { return (
{/* eslint-disable-next-line react/no-danger */}