gendesign/frontend/src/app/layout.tsx
Light1YT 05eb70eb62
All checks were successful
CI / changes (pull_request) Successful in 5s
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Successful in 55s
CI / openapi-codegen-check (pull_request) Successful in 1m57s
feat(site-finder): ПТИЦА dark cockpit — increment 1 (shell + hero + Development Scan)
New non-destructive route /site-finder/analysis/[cad]/ptica rendering the existing
/analyze data in the «ПТИЦА» operator-terminal cockpit. The light analysis page,
Section1-6, globals.css and package.json are untouched.

PR#1 scope: app-shell (topbar + 4 tabs + left rail), hero (dark Leaflet map +
parcel passport KV-grid + Buildability radial gauge + invest-score block), and the
Development Scan card grid — wired to useParcelAnalyzeQuery / ParcelAnalysis.

Data honesty: real fields render live (passport egrn.*, district, utilities.summary,
median_price, pipeline_24mo); absent fields show muted placeholders with source
captions (buildability/risk = derived proxy «предв.»; invest/buy-signal «после
прогноза»; КСИТ/height/ОКС/economy «—») via typed ptica-adapt.ts — no fake numbers
presented as live.

Dark theme is a CSS-module scoped under .pticaRoot[data-theme=dark] (cannot leak to
the light app); IBM Plex Mono added via next/font (no dep/lockfile change). Leaflet
via dynamic(ssr:false). TS strict, no any. Deferred to follow-up PRs: Scenarios
(forecast), Reports+Compare tabs, 16 detail drawers, Three.js 3D massing.
2026-06-20 15:29:53 +05:00

37 lines
932 B
TypeScript

import type { Metadata } from "next";
import { IBM_Plex_Mono } from "next/font/google";
import { RouteGuard } from "@/components/auth/RouteGuard";
import "./globals.css";
import { Providers } from "./providers";
// ПТИЦА cockpit numerals (mono). next/font is bundled — no package.json change.
// Cyrillic + latin subsets so mono digits/labels render in the dark cockpit.
const plexMono = IBM_Plex_Mono({
subsets: ["latin", "cyrillic"],
weight: ["400", "500", "600"],
variable: "--font-plex-mono",
display: "swap",
});
export const metadata: Metadata = {
title: "GenDesign",
description: "Generative Design + Site Finder",
};
export default function RootLayout({
children,
}: {
children: React.ReactNode;
}) {
return (
<html lang="ru" className={plexMono.variable}>
<body>
<Providers>
<RouteGuard>{children}</RouteGuard>
</Providers>
</body>
</html>
);
}