Ports the design system foundation from the web frontend to the Flutter app. Single-file change to lib/core/theme.dart — most widgets read colorScheme.primary so the palette flip alone covers a large surface.
What changed
Palette swap — dark mode flipped from cool grey (#0F0F14/#16161F) to Obsidian/Iron/Pewter (#14171A/#1E2228/#3F4651); light mode flipped from white-and-cool-blue to warm parchment (#F5F1E8/#FBF8F0); primary swapped from indigo #7C3AED to dusty violet #5B4A8A in both modes; error swapped from indigo-red pair to terracotta #C04A1F (semantic Error per the doc, distinct from destructive Oxblood used for delete buttons).
Action token ThemeExtension — new ActionColors extension exposes Moss/Bronze/Oxblood/Pewter outside the ColorScheme so widgets can read action-button colors via Theme.of(context).extension<ActionColors>()!.primary. Hybrid rule: ColorScheme.primary stays the dusty-violet brand accent for Send/empty-state CTAs; action buttons use the ActionColors palette. No widget refactors in this commit — extension is defined for surface-phase work to consume.
Typography — Inter loaded for body / labels / titleMedium-and-below (was system default). Fraunces still loaded for display / headline / titleLarge — only at ≥18px per the doc rule. JetBrains Mono available at call sites via GoogleFonts.jetBrainsMono().
GradientButton recolor — brand-moment CTA equivalent of the web's --gradient-cta. Colors swapped from indigo gradient (#7C3AED → #5B21B6) to dusty-violet gradient (#5B4A8A → #3F3560); glow shadow rgba updated to match.
## Summary
Ports the design system foundation from the web frontend to the Flutter app. Single-file change to `lib/core/theme.dart` — most widgets read `colorScheme.primary` so the palette flip alone covers a large surface.
### What changed
- **Palette swap** — dark mode flipped from cool grey (`#0F0F14`/`#16161F`) to Obsidian/Iron/Pewter (`#14171A`/`#1E2228`/`#3F4651`); light mode flipped from white-and-cool-blue to warm parchment (`#F5F1E8`/`#FBF8F0`); primary swapped from indigo `#7C3AED` to dusty violet `#5B4A8A` in both modes; error swapped from indigo-red pair to terracotta `#C04A1F` (semantic Error per the doc, distinct from destructive Oxblood used for delete buttons).
- **Action token ThemeExtension** — new `ActionColors` extension exposes Moss/Bronze/Oxblood/Pewter outside the `ColorScheme` so widgets can read action-button colors via `Theme.of(context).extension<ActionColors>()!.primary`. Hybrid rule: `ColorScheme.primary` stays the dusty-violet brand accent for Send/empty-state CTAs; action buttons use the `ActionColors` palette. No widget refactors in this commit — extension is defined for surface-phase work to consume.
- **Typography** — Inter loaded for body / labels / `titleMedium`-and-below (was system default). Fraunces still loaded for display / headline / `titleLarge` — only at ≥18px per the doc rule. JetBrains Mono available at call sites via `GoogleFonts.jetBrainsMono()`.
- **GradientButton recolor** — brand-moment CTA equivalent of the web's `--gradient-cta`. Colors swapped from indigo gradient (`#7C3AED` → `#5B21B6`) to dusty-violet gradient (`#5B4A8A` → `#3F3560`); glow shadow rgba updated to match.
### Out of scope (tracked for future work)
Per-screen Hybrid-rule button reclassification, Lucide icon migration, chat bubble Illuminated Transcript pattern, input border radius adjustment, and voice/tone touchups. Tracked in Fable task #156.
### Reference
Mirrors the web foundation pass shipped on FabledScribe at `7a9a8b7` (2026-04-27). Web design system doc: `docs/design-system.md` in fabledscribe.
## Commits in this release
```
0f05f47 feat(design): foundation port — dusty violet, warm parchment, action tokens
```
## Test plan
- [ ] Build APK on `dev` and side-load
- [ ] Confirm dark mode renders Obsidian background, dusty violet accent
- [ ] Confirm light mode renders warm parchment, dusty violet accent
- [ ] Confirm GradientButton (chat send, journal send) shows new dusty-violet gradient
- [ ] Confirm body text renders in Inter (was system default)
- [ ] Walk Journal, Chat, Knowledge, Settings and verify nothing reads as broken or off-palette
🤖 Generated with [Claude Code](https://claude.com/claude-code)
This repo is archived. You cannot comment on pull requests.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
Ports the design system foundation from the web frontend to the Flutter app. Single-file change to
lib/core/theme.dart— most widgets readcolorScheme.primaryso the palette flip alone covers a large surface.What changed
#0F0F14/#16161F) to Obsidian/Iron/Pewter (#14171A/#1E2228/#3F4651); light mode flipped from white-and-cool-blue to warm parchment (#F5F1E8/#FBF8F0); primary swapped from indigo#7C3AEDto dusty violet#5B4A8Ain both modes; error swapped from indigo-red pair to terracotta#C04A1F(semantic Error per the doc, distinct from destructive Oxblood used for delete buttons).ActionColorsextension exposes Moss/Bronze/Oxblood/Pewter outside theColorSchemeso widgets can read action-button colors viaTheme.of(context).extension<ActionColors>()!.primary. Hybrid rule:ColorScheme.primarystays the dusty-violet brand accent for Send/empty-state CTAs; action buttons use theActionColorspalette. No widget refactors in this commit — extension is defined for surface-phase work to consume.titleMedium-and-below (was system default). Fraunces still loaded for display / headline /titleLarge— only at ≥18px per the doc rule. JetBrains Mono available at call sites viaGoogleFonts.jetBrainsMono().--gradient-cta. Colors swapped from indigo gradient (#7C3AED→#5B21B6) to dusty-violet gradient (#5B4A8A→#3F3560); glow shadow rgba updated to match.Out of scope (tracked for future work)
Per-screen Hybrid-rule button reclassification, Lucide icon migration, chat bubble Illuminated Transcript pattern, input border radius adjustment, and voice/tone touchups. Tracked in Fable task #156.
Reference
Mirrors the web foundation pass shipped on FabledScribe at
7a9a8b7(2026-04-27). Web design system doc:docs/design-system.mdin fabledscribe.Commits in this release
Test plan
devand side-load🤖 Generated with Claude Code