f2f6fa06a2
M8 phase 1.4. Mirrors flutter_client/lib/theme/. Source of truth for hex values is flutter_client/shared/fabledsword.tokens.json (manual sync until cross-language codegen lands; ports the dark-surface + flat cohort). Material 3 ColorScheme takes accent as primary; action colors (Moss/Bronze/Oxblood) live in LocalActionColors as semantic roles per the project_design_system rule "NEVER use accent for action buttons". Typography uses androidx.compose.ui.text.googlefonts to fetch Fraunces / Inter / JetBrains Mono at runtime via Play Services Fonts — matches the Flutter client's `google_fonts` package (no bundled .ttf files in either tree). Weights restricted to 400/500. Fraunces is reserved for ≥18sp display/headline slots per the design-system rule. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>