Release v26.04.28.1 — Design system foundation port #30

Merged
bvandeusen merged 0 commits from dev into main 2026-04-28 09:12:58 -04:00
bvandeusen commented 2026-04-28 09:12:39 -04:00 (Migrated from git.fabledsword.com)

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

## 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.
No Reviewers
No Label
1 Participants
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: bvandeusen/FabledApp#30