"""Centralized design tokens and CSS injection for Amplegest.""" from __future__ import annotations import streamlit as st # ── Brand ───────────────────────────────────────────────────────────────────── BRAND_GREEN = "#10b981" BRAND_GREEN_DARK = "#059669" # ── Surfaces ────────────────────────────────────────────────────────────────── BG = "#ffffff" BG_MUTED = "#fafaf9" BORDER = "#e5e7eb" BORDER_STRONG = "#d4d4d4" # ── Text ────────────────────────────────────────────────────────────────────── TEXT = "#0a0a0a" TEXT_MUTED = "#6b7280" TEXT_FAINT = "#9ca3af" # ── Semantic palette (light pastel tints) ───────────────────────────────────── GREEN = "#10b981" BULL = "#10b981" BULL_BG = "#ecfdf5" BULL_BORDER = "#a7f3d0" RED = "#ef4444" BEAR = "#ef4444" BEAR_BG = "#fef2f2" BEAR_BORDER = "#fecaca" AMBER = "#f59e0b" WARN = "#f59e0b" WARN_BG = "#fffbeb" WARN_BORDER = "#fde68a" BLUE = "#3b82f6" INFO = "#3b82f6" INFO_BG = "#eff6ff" INFO_BORDER = "#bfdbfe" GRAY = "#6b7280" PURPLE = "#8b5cf6" AI_BG = "#faf5ff" AI_BORDER = "#ddd6fe" AI_COLOR = "#7c3aed" AI_BADGE_BG = "#ede9fe" IMPACT_HIGH_BG = "#0f172a" # slate-900 IMPACT_HIGH_TEXT = "#ffffff" IMPACT_MED_BG = "#64748b" # slate-500 IMPACT_MED_TEXT = "#ffffff" IMPACT_LOW_BG = "transparent" IMPACT_LOW_TEXT = "#94a3b8" # slate-400 IMPACT_LOW_BORDER = "#cbd5e1" # slate-300 # ── Plotly rgba aliases ─────────────────────────────────────────────────────── GREEN_A53 = "rgba(16,185,129,0.53)" GREEN_A40 = "rgba(16,185,129,0.40)" RED_A40 = "rgba(239,68,68,0.40)" PURPLE_A53 = "rgba(139,92,246,0.53)" BLUE_A53 = "rgba(96,165,250,0.53)" # ── Radius ──────────────────────────────────────────────────────────────────── RADIUS_CARD = "12px" RADIUS_BTN = "8px" RADIUS_CHIP = "6px" # ── Typographic scale ───────────────────────────────────────────────────────── FS_PAGE = "1.55rem" # ~25px page/screen title FS_SECTION = "1.05rem" # ~17px section sub-header FS_CARD = "0.95rem" # ~15px card headline (semibold) FS_BODY = "0.9rem" # ~14.5px body text FS_META = "0.75rem" # ~12px meta/attribution line FS_EYEBROW = "0.6rem" # uppercase micro-label (was scattered 0.56–0.72rem) FS_SECTION_LABEL = "0.78rem" # ── Spacing scale ───────────────────────────────────────────────────────────── SPACE_1 = "4px" SPACE_2 = "8px" SPACE_3 = "12px" SPACE_4 = "16px" SPACE_5 = "20px" SPACE_6 = "28px" # intentionally 8px jump — used for section-break vertical rhythm # NAV_GROUPS now lives in dashboard.nav — imported from there in app.py. # Kept as a re-export for any legacy callers. def _lazy_nav_groups(): # noqa: F401 — accessed via dashboard.nav.NAV_GROUPS from dashboard.nav import NAV_GROUPS # noqa: F401 return NAV_GROUPS # ── Logo SVG — geometric P in emerald rounded square ───────────────────────── LOGO_SVG = """ """ def inject_global_css() -> None: """Inject Inter font + global Amplegest styles. Call once from app.py.""" st.html( """ """, )