// Темы и палитра. Перенос из web/theme_manager.py (THEMES) и web/designer.py (colors). // Каждая тема переопределяет только фоновые цвета; остальная палитра общая. export interface Theme { id: string; name: string; background: string; surface: string; surfaceAlt: string; } export const THEMES: Theme[] = [ { id: "default", name: "ЦОПП (оранжевая)", background: "#F4F6F8", surface: "#FFFFFF", surfaceAlt: "#E4E8ED" }, { id: "warm", name: "Тёплая", background: "#FFF3E6", surface: "#FFFFFF", surfaceAlt: "#FFD9B3" }, { id: "blue", name: "Синяя", background: "#E3F2FD", surface: "#FFFFFF", surfaceAlt: "#B8D9F5" }, { id: "green", name: "Зелёная", background: "#EDF7E7", surface: "#FFFFFF", surfaceAlt: "#BEE3B0" }, { id: "dark", name: "Тёмная", background: "#1E2A3A", surface: "#2D3F54", surfaceAlt: "#3D5068" }, ]; export const DEFAULT_THEME_ID = "default"; // Постоянная палитра (web/designer.py: class colors) export const PALETTE = { primary: "#F85A40", primaryDark: "#D94530", primaryLight: "#FFEAB7", accent: "#FFC845", accentLime: "#FFC845", secondaryLight: "#FFEAB7", info: "#007FBD", infoDark: "#006AA3", infoLight: "#D9F1F4", success: "#85C446", successLight: "#C0DE9E", textPrimary: "#1E2A3A", textSecondary: "#5A6779", textOnPrimary: "#FFFFFF", border: "#DDE3EA", }; // Масштаб (web/theme_manager.py) export const SCALE_MIN = 0.8; export const SCALE_MAX = 2.5; export const SCALE_STEP = 0.1; export const SCALE_DEFAULT = 1.3; // Автоопределение по ширине экрана export const MOBILE_BREAKPOINT = 600; export const SCALE_MOBILE = 1.0; export const SCALE_DESKTOP = 1.5; export function getTheme(id: string | null | undefined): Theme { return THEMES.find((t) => t.id === id) ?? THEMES[0]; } export function autoScale(): number { if (typeof window === "undefined") return SCALE_DEFAULT; return window.innerWidth < MOBILE_BREAKPOINT ? SCALE_MOBILE : SCALE_DESKTOP; }