diff --git a/frontend/src/app/globals.css b/frontend/src/app/globals.css index 53bbea46..a4ab1b3f 100644 --- a/frontend/src/app/globals.css +++ b/frontend/src/app/globals.css @@ -61,7 +61,8 @@ body { background: var(--bg-app); color: var(--fg-primary); font-family: - Inter, + var(--font-inter), + "Inter", -apple-system, "Segoe UI", system-ui, diff --git a/frontend/src/app/layout.tsx b/frontend/src/app/layout.tsx index 6b158408..0cf70ef7 100644 --- a/frontend/src/app/layout.tsx +++ b/frontend/src/app/layout.tsx @@ -1,11 +1,20 @@ import type { Metadata } from "next"; -import { IBM_Plex_Mono } from "next/font/google"; +import { IBM_Plex_Mono, Inter } from "next/font/google"; import { RouteGuard } from "@/components/auth/RouteGuard"; import "./globals.css"; import { Providers } from "./providers"; +// App UI typeface (Inter). next/font is bundled — no package.json change. +// Cyrillic + latin subsets so RU labels render correctly across the app. +const inter = Inter({ + subsets: ["latin", "cyrillic"], + weight: ["400", "500", "600", "700"], + variable: "--font-inter", + display: "swap", +}); + // ПТИЦА 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({ @@ -26,7 +35,7 @@ export default function RootLayout({ children: React.ReactNode; }) { return ( - + {children} diff --git a/frontend/src/app/site-finder/analysis/[cad]/ptica/ptica.module.css b/frontend/src/app/site-finder/analysis/[cad]/ptica/ptica.module.css index 9e9a02f1..f164d9c4 100644 --- a/frontend/src/app/site-finder/analysis/[cad]/ptica/ptica.module.css +++ b/frontend/src/app/site-finder/analysis/[cad]/ptica/ptica.module.css @@ -10,7 +10,8 @@ /* ===================== SCOPED TOKENS (dark) ===================== */ .pticaRoot[data-theme="dark"] { --font-ui: - "Inter", "Manrope", -apple-system, "Segoe UI", system-ui, sans-serif; + var(--font-inter), "Inter", "Manrope", -apple-system, "Segoe UI", + system-ui, sans-serif; --font-mono: var(--font-plex-mono), "IBM Plex Mono", "Roboto Mono", ui-monospace, monospace; @@ -239,6 +240,18 @@ display: flex; align-items: center; gap: 12px; + /* Wordmark is the «На главную» link — visibly clickable, inherits cockpit + colors (no default link blue/underline). */ + cursor: pointer; + text-decoration: none; + color: inherit; + border-radius: var(--radius-xs); +} +/* Visible focus ring on the home link — matches cockpit pattern + (.drawerClose / .gaugeButton :focus-visible). */ +.wordmark:focus-visible { + outline: var(--line-strong) solid var(--accent-cyan); + outline-offset: 3px; } .bird { width: 26px; @@ -433,6 +446,12 @@ overflow: hidden; } .mapMount :global(.leaflet-container) { + position: absolute; + inset: 0; + /* Contain Leaflet's panes (tile 200 / overlay 400 / marker 600 / popup 700) + in their OWN stacking context below the cockpit overlay (.mapOverlay / + .mapTools at z-index 4) so the legend is not buried under the tiles. */ + z-index: 1; width: 100%; height: 100%; background: transparent; @@ -1193,6 +1212,12 @@ } .hbarName { color: var(--text-muted); + /* Keep one row per format — long bucket labels («5-80+ м²») must not wrap to + 2 lines and break the name / track / value column alignment across rows. */ + min-width: 0; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; } .hbarTrack { height: 5px; diff --git a/frontend/src/components/site-finder/ptica/PticaMapInner.tsx b/frontend/src/components/site-finder/ptica/PticaMapInner.tsx index 783e465e..312756cb 100644 --- a/frontend/src/components/site-finder/ptica/PticaMapInner.tsx +++ b/frontend/src/components/site-finder/ptica/PticaMapInner.tsx @@ -35,6 +35,7 @@ import { Polyline, Popup, Tooltip, + AttributionControl, useMap, useMapEvents, } from "react-leaflet"; @@ -434,9 +435,13 @@ export default function PticaMapInner({ center={center} zoom={geom ? 15 : 11} zoomControl={false} + attributionControl={false} scrollWheelZoom style={{ cursor: addMode ? "crosshair" : "grab" }} > + {/* Drop the Leaflet 1.9 flag/«Leaflet» prefix but KEEP the per-tile data + attribution (© Esri · Maxar / CARTO · OSM) required for licensing. */} + diff --git a/frontend/src/components/site-finder/ptica/PticaShell.tsx b/frontend/src/components/site-finder/ptica/PticaShell.tsx index a8c548f8..73bc30f4 100644 --- a/frontend/src/components/site-finder/ptica/PticaShell.tsx +++ b/frontend/src/components/site-finder/ptica/PticaShell.tsx @@ -16,6 +16,7 @@ */ import { useEffect, useState } from "react"; +import Link from "next/link"; import styles from "@/app/site-finder/analysis/[cad]/ptica/ptica.module.css"; @@ -319,7 +320,11 @@ export function PticaShell({ activeTab, onTabChange, children }: Props) { {/* ── Main column ─────────────────────────────────────────────── */}
-
+
ПТИЦА
@@ -329,7 +334,7 @@ export function PticaShell({ activeTab, onTabChange, children }: Props) { информационно-цифрового анализа
-
+