diff --git a/docs/design-system.md b/docs/design-system.md index d1db05e..ab9f373 100644 --- a/docs/design-system.md +++ b/docs/design-system.md @@ -362,7 +362,7 @@ If using Tailwind, extend the theme with these tokens rather than relying on def > This section tracks decisions made while adapting the FabledSword baseline above for Scribe specifically. Items here are *in progress* — once they feel solid, they get folded into the main body of the document (either as Scribe-specific extensions in the per-app section, or as updates to the universal rules where Scribe's needs reveal a gap in the baseline). -*Iteration started: 2026-04-26. Foundation pass shipped 2026-04-27 in `7a9a8b7` — palette, fonts, light mode, action tokens, hardcoded indigo cleanup, warm-gold deprecation. Surface phase (button reclassification, border audit, Lucide migration, voice/tone) tracked in a separate spec.* +*Iteration started: 2026-04-26. Foundation pass shipped 2026-04-27 in `7a9a8b7` (palette, fonts, light mode, action tokens, hardcoded indigo cleanup, warm-gold deprecation). Surface phase shipped 2026-04-27 across `93a3beb` → `3c1ec40` (Lucide migration, Hybrid-rule button reclassification per surface, long-form line-height, two-weights-only). The system is now applied end-to-end; this section will fold into the main body once the result has had time to settle in real use.* ## Decisions made so far @@ -535,17 +535,39 @@ Border weight is not load-bearing for Scribe — happy to use the doc's 0.5px ha Mechanical token + font + light-mode rewrite of `frontend/src/assets/theme.css`, plus a sweep of hardcoded indigo and `--color-accent-warm` references across ~14 component files. Action tokens (`--color-action-primary` Moss, `--color-action-secondary` Bronze, `--color-action-destructive` Oxblood, `--color-action-ghost-border` Pewter) are defined but not yet applied — buttons still flow through `--color-primary` and read as dusty-violet gradients in the meantime, by design. Spec lives at `docs/superpowers/specs/2026-04-27-design-system-polish-foundation-design.md` (gitignored, local-only). -### Surface phase — next +### Surface phase — shipped 2026-04-27 (`93a3beb` → `3c1ec40`) -Per-component work, picked up surface-by-surface: +Bundled as Hybrid (option C from the brainstorm): Lucide cross-cutting first, then surface-by-surface for the judgment work. Spec lives at `docs/superpowers/specs/2026-04-27-design-system-polish-surface-design.md` (gitignored, local-only). Seven PRs landed on `dev`: -- Button reclassification per the Hybrid rule — for each button decide brand moment (accent) vs Moss / Bronze / Oxblood / Pewter, swap to the appropriate `--color-action-*` token -- Lucide icon migration (~16 files, 30–60 swaps) — install `lucide-vue-next`, replace hand-inlined SVGs, enforce 16/24px scale and 1/1.5 stroke weights -- Border placement audit per the structural-not-decorative rule — strip from list rows, inline `ToolCallCard` inside chat bubbles, filter chips, empty-state callouts -- Voice/tone copy touchups, opportunistic as components are touched -- 3 emoji-as-icons replaced with Lucide equivalents -- Long-form 1.7 line-height applied to Notes viewer, Journal entries, assistant chat bubbles -- Bubble shape tweaks (radius asymmetry, tail) if needed beyond the foundation recolor -- Per-component scoped-CSS font-family declarations cleaned up opportunistically +| PR | Commit | Surface | Notes | +|---|---|---|---| +| 1 | `93a3beb` | Lucide cross-cutting | 60 hand-inlined SVGs across 15 files → `lucide-vue-next`. Every chrome icon at 16 or 24. Emoji-as-icons (`✕`, `✓`, `🎤`, `📎`, `↻`, `↑`, `×`, `☀`/`☾`) swept across the chrome. AppLogo wordmark and the GraphView D3 mount kept as the legitimate exceptions. | +| 2 | `3d916d7` | Journal | Buttons audited; `↻` weather refresh → Lucide `RotateCcw`; assistant bubble line-height bumped; redundant `.journal-title` font-family dropped; dead `.news-section` CSS removed. | +| 3 | `4192a64` | Chat | `.message-content` long-form 1.7 line-height on assistant bubbles; ToolCallCard outer border removed (bubble already contains it; error state moved to a left-edge accent); bulk-delete recolored to Oxblood with Trash2 icon; `.bulk-link` accent → muted text. | +| 4 | `efb3534` | Knowledge cluster | `.prose` line-height bumped to 1.7 globally so all reading surfaces inherit. Save → Moss; Delete → Oxblood + Trash2; Edit / Advance → Moss; Convert / Share → Bronze. | +| 5 | `ff498ce` | Project + Workspace | Project save panel → Moss; milestone confirm/cancel → Moss/Bronze; modal-btn-danger and per-row delete affordances → Oxblood; "Open Workspace" stays accent (project-surface brand moment). | +| 6 | `541e2ed` | Settings | Densest button surface — every `.btn-save`, `.btn-primary`, `.btn-secondary`, `.btn-danger`, `.btn-danger-outline`, `.btn-toggle-open` reclassified per Hybrid; missing `.btn-danger` style block added (was unstyled before). | +| 7 | `3c1ec40` | Edge surfaces | Calendar `New Event` → Moss; EventSlideOver Save/Cancel/Delete reclassified; HomeView hero CTA stays accent (brand moment); two-weights-only sweep across Header/Home/Calendar/Graph. | -A surface-phase design spec gets written when the work begins. New threads will accumulate here as gaps surface during application. +**Cross-cutting changes folded in as the work touched files:** + +- Long-form 1.7 line-height on `.prose` (PR 4) — applies to Note viewer, Task viewer, chat assistant bubbles, anywhere markdown renders into a reading surface. +- Two-weights-only (400 + 500) — every `font-weight: 600` and `700` snapped to `500` across all surface PRs. +- Hardcoded `--color-danger` in destructive button contexts → `--color-action-destructive` (Oxblood). `--color-danger` (Error terracotta) preserved for validation/error messages, per the doc's distinction between Error and Destructive. +- Adjacent `×` / `✕` / unicode-arrow emoji swept opportunistically as files were touched (PRs 5, 7). + +### Out of scope — deferred indefinitely + +Items deliberately not addressed in this round; revisit when a real need surfaces: + +- Lucide stroke-weight overrides (doc spec: 1.5 at 24, 1 at 16; current: Lucide default 2). Touched components if they read too heavy in practice. +- Filled-as-active icon state — no current affordance uses it; introduce when bookmark/pin/star toggles are added. +- Type-scale / spacing-scale CSS variables — components keep literal values. +- Token rename to `--fs-*` namespace — Scribe is the only FabledSword app sharing this codebase. +- FabledSword lockup placement — waiting on the actual heraldic mark to be drawn. +- Standalone voice/tone audit across every UI string — opportunistic-only; full sweep deferred unless drift becomes visible. +- A handful of editor utility buttons (`.btn-suggest-tags`, `.btn-link-all`, AI assist generate/proofread/accept/reject set, etc.) — currently ghost-styled and visually compliant; revisited only if they read off in practice. + +### Open threads + +*New threads will accumulate here as gaps surface in real use.*