From f4b54671d96040ccfe0eedfc305e38c7ac10c1a7 Mon Sep 17 00:00:00 2001 From: Light1YT Date: Sun, 21 Jun 2026 01:41:13 +0500 Subject: [PATCH] fix(ptica): load Inter, surface map legend, drop flag, honest product chart, home link MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Root causes behind the cockpit looking «криво/косо»: - Inter was never loaded — app referenced literal "Inter" but only IBM Plex Mono went through next/font, so the whole cockpit rendered in -apple-system (wider metrics → rail labels overflow, tabular numbers misalign). Load Inter via next/font/google (latin+cyrillic) and wire --font-ui/body to it. - Map legend overlay (z-index 4) was buried under Leaflet panes (200-700): give .leaflet-container its own stacking context (position:absolute; z-index:1) like the prototype, so the overlay + tools surface. - Drop the Leaflet attribution flag/"Leaflet" prefix (prefix={false}) while keeping the © Esri/Maxar/CARTO data credits. - RECOMMENDED PRODUCT rendered 15 degenerate full-red −1.00 bars: filter mix to the recommended class, show an honest empty state on degenerate signal, cap rows, and stop labels wrapping (nowrap+ellipsis). - ПТИЦА wordmark is now a Link → /site-finder (home), with a focus ring. --- frontend/src/app/globals.css | 3 +- frontend/src/app/layout.tsx | 13 +++++- .../analysis/[cad]/ptica/ptica.module.css | 27 +++++++++++- .../site-finder/ptica/PticaMapInner.tsx | 5 +++ .../site-finder/ptica/PticaShell.tsx | 9 +++- .../ptica/cockpit/RecommendedProductCard.tsx | 43 ++++++++++++++++--- 6 files changed, 89 insertions(+), 11 deletions(-) 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) { информационно-цифрового анализа
-
+