"""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(
"""
""",
)