141 lines
3.6 KiB
Python
141 lines
3.6 KiB
Python
"""Hermes Hub — Centralized Design Tokens and Theme Definition (v3).
|
|
|
|
Source of Truth: Brand Guidelines & Brandbook
|
|
Primary Palette:
|
|
PRIMARY: #0F1510 (Obsidian Forest)
|
|
DARK: #1A2A1F (Deep Pine)
|
|
SECONDARY: #2F4A36 (Moss Slate)
|
|
LIGHT: #F7F1E3 (Warm Ivory)
|
|
ACCENT: #CDAA64 (Ancient Gold)
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
|
|
class Theme:
|
|
# ── Core Brand Palette ──
|
|
PRIMARY = "#0F1510"
|
|
DARK = "#1A2A1F"
|
|
SECONDARY = "#2F4A36"
|
|
LIGHT = "#F7F1E3"
|
|
ACCENT = "#CDAA64"
|
|
|
|
# ── Surfaces & Backgrounds ──
|
|
BG_WINDOW = "#0F1510"
|
|
BG_SIDEBAR = "#142018"
|
|
BG_HEADER = "#16241B"
|
|
BG_STATUSBAR = "#121C15"
|
|
BG_MODAL_BACKDROP = "#080B08"
|
|
|
|
SURFACE = "#1D3123"
|
|
SURFACE_HOVER = "#274230"
|
|
SURFACE_ACTIVE = "#31543D"
|
|
SURFACE_SELECTED = "#284432"
|
|
SURFACE_MUTED = "#16251A"
|
|
|
|
# ── Borders ──
|
|
BORDER = "#2F4A36"
|
|
BORDER_SUBTLE = "#1F3526"
|
|
BORDER_ACCENT = "#CDAA64"
|
|
BORDER_HOVER = "#40644B"
|
|
|
|
# ── Typography Colors ──
|
|
TEXT_PRIMARY = "#F7F1E3"
|
|
TEXT_SECONDARY = "#C5BEAF"
|
|
TEXT_MUTED = "#8A9C8E"
|
|
TEXT_ON_ACCENT = "#0F1510"
|
|
TEXT_ACCENT = "#CDAA64"
|
|
TEXT_DISABLED = "#546457"
|
|
|
|
# ── Accent States ──
|
|
ACCENT_HOVER = "#DCBE7D"
|
|
ACCENT_PRESSED = "#BA954E"
|
|
ACCENT_DIM = "#3D3522"
|
|
ACCENT_GLOW = "#CDAA64"
|
|
|
|
# ── Operational / Status Colors ──
|
|
STATUS_HEALTHY = "#2E7D32" # Vibrant Forest Green
|
|
STATUS_WARNING = "#D97706" # Amber Gold
|
|
STATUS_ERROR = "#DC2626" # Ruby Crimson
|
|
STATUS_INFO = "#2563EB" # Azure
|
|
STATUS_AUTH_REQUIRED = "#D97706"
|
|
STATUS_DISABLED = "#5A6B5D"
|
|
STATUS_FAILOVER = "#3B82F6"
|
|
STATUS_MAIN = "#CDAA64" # Gold Badge
|
|
STATUS_ORCHESTRATOR = "#E5C158" # Imperial Gold
|
|
|
|
# ── Provider Specific Accent Colors ──
|
|
PROVIDER_ANTIGRAVITY = "#4285F4" # Google Blue
|
|
PROVIDER_CODEX = "#10A37F" # OpenAI Emerald
|
|
PROVIDER_OPENCODE = "#F97316" # OpenCode Orange
|
|
|
|
# ── Spacing Scale (px) ──
|
|
SPACE_XS = 4
|
|
SPACE_SM = 8
|
|
SPACE_MD = 12
|
|
SPACE_LG = 16
|
|
SPACE_XL = 24
|
|
SPACE_2XL = 32
|
|
|
|
# ── Corner Radius Scale (px) ──
|
|
RADIUS_SM = 6
|
|
RADIUS_MD = 10
|
|
RADIUS_LG = 14
|
|
RADIUS_PILL = 999
|
|
|
|
# ── Control Heights & Dimensions ──
|
|
HEIGHT_BTN_SM = 30
|
|
HEIGHT_BTN_MD = 38
|
|
HEIGHT_BTN_LG = 44
|
|
HEIGHT_NAV_ITEM = 42
|
|
HEIGHT_HEADER = 60
|
|
HEIGHT_STATUSBAR = 30
|
|
WIDTH_SIDEBAR = 240
|
|
|
|
# ── Fonts ──
|
|
FONT_FAMILY_TITLE = "Cinzel"
|
|
FONT_FAMILY_UI = "Segoe UI"
|
|
FONT_FAMILY_MONO = "Consolas"
|
|
|
|
@classmethod
|
|
def font_title_hero(cls):
|
|
return (cls.FONT_FAMILY_TITLE, 24, "bold")
|
|
|
|
@classmethod
|
|
def font_title_page(cls):
|
|
return (cls.FONT_FAMILY_UI, 24, "bold")
|
|
|
|
@classmethod
|
|
def font_title_section(cls):
|
|
return (cls.FONT_FAMILY_UI, 19, "bold")
|
|
|
|
@classmethod
|
|
def font_heading(cls):
|
|
return (cls.FONT_FAMILY_UI, 16, "bold")
|
|
|
|
@classmethod
|
|
def font_subheading(cls):
|
|
return (cls.FONT_FAMILY_UI, 15, "bold")
|
|
|
|
@classmethod
|
|
def font_body(cls):
|
|
return (cls.FONT_FAMILY_UI, 14)
|
|
|
|
@classmethod
|
|
def font_body_bold(cls):
|
|
return (cls.FONT_FAMILY_UI, 14, "bold")
|
|
|
|
@classmethod
|
|
def font_caption(cls):
|
|
return (cls.FONT_FAMILY_UI, 12)
|
|
|
|
@classmethod
|
|
def font_micro(cls):
|
|
return (cls.FONT_FAMILY_UI, 11)
|
|
|
|
@classmethod
|
|
def font_mono(cls):
|
|
return (cls.FONT_FAMILY_MONO, 13)
|
|
|
|
@classmethod
|
|
def font_mono_sm(cls):
|
|
return (cls.FONT_FAMILY_MONO, 12)
|