From 978a2627fbd5b0d4e40cbf7aa1ad770355be6e79 Mon Sep 17 00:00:00 2001 From: Bryan Van Deusen Date: Wed, 11 Mar 2026 10:57:02 -0400 Subject: [PATCH] UI refinement: toolbar icons, gradient CTA, Fraunces title, viewer polish MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit MarkdownToolbar: - Replace text labels with SVG icons (Material Design paths) - Group buttons with visual separators: text / headings / lists / code / links - Add Strikethrough and Blockquote buttons (previously missing) - Active state: tinted bg + ring instead of solid fill; hover lift shadow - Toolbar container: pill shape with border (matches rest of UI) editor-shared.css: - btn-save: gradient + glow (linear-gradient(135deg, #6366f1, #4f46e5)) - title-input: borderless with Fraunces font and focus underline NoteEditorView: - Back button label standardized to "← Notes" (was "Back") - Write/Preview tabs and toolbar now share the same row (flex-direction row) NoteViewerView: - Shimmer skeleton loader replaces plain "Loading..." text - Note title uses Fraunces font at 2rem - Edit button becomes primary gradient CTA - Meta line shows clock/pencil SVG icons alongside timestamps - Backlinks section: card grid with colored type badges (note=indigo, task=amber) Co-Authored-By: Claude Sonnet 4.6 --- frontend/src/assets/editor-shared.css | 39 +++- frontend/src/components/MarkdownToolbar.vue | 235 +++++++++++--------- frontend/src/views/NoteEditorView.vue | 12 +- frontend/src/views/NoteViewerView.vue | 231 +++++++++++++++---- 4 files changed, 352 insertions(+), 165 deletions(-) diff --git a/frontend/src/assets/editor-shared.css b/frontend/src/assets/editor-shared.css index 80ce3e8..42123fe 100644 --- a/frontend/src/assets/editor-shared.css +++ b/frontend/src/assets/editor-shared.css @@ -51,15 +51,23 @@ color: var(--color-primary); } .btn-save { - padding: 0.45rem 1rem; - background: var(--color-primary); + padding: 0.45rem 1.1rem; + background: linear-gradient(135deg, #6366f1, #4f46e5); color: #fff; border: none; border-radius: var(--radius-sm); cursor: pointer; + font-weight: 600; + font-size: 0.875rem; + box-shadow: 0 2px 8px rgba(99, 102, 241, 0.28); + transition: box-shadow 0.15s, opacity 0.15s; +} +.btn-save:hover:not(:disabled) { + box-shadow: 0 4px 14px rgba(99, 102, 241, 0.42); + opacity: 0.95; } .btn-save:disabled { - opacity: 0.6; + opacity: 0.55; cursor: default; } .btn-delete { @@ -86,13 +94,26 @@ color: var(--color-primary); } .title-input { - padding: 0.5rem 0.75rem; - border: 1px solid var(--color-input-border); - border-radius: var(--radius-sm); - font-size: 1.25rem; - font-weight: 600; - background: var(--color-bg-card); + padding: 0.4rem 0; + border: none; + border-bottom: 1.5px solid var(--color-border); + border-radius: 0; + font-size: 1.5rem; + font-weight: 700; + font-family: "Fraunces", Georgia, serif; + background: transparent; color: var(--color-text); + width: 100%; + transition: border-color 0.15s; +} +.title-input:focus { + outline: none; + border-bottom-color: var(--color-primary); +} +.title-input::placeholder { + color: var(--color-text-muted); + font-style: italic; + font-weight: 400; } .editor-tabs { display: flex; diff --git a/frontend/src/components/MarkdownToolbar.vue b/frontend/src/components/MarkdownToolbar.vue index 3be8101..e3350d5 100644 --- a/frontend/src/components/MarkdownToolbar.vue +++ b/frontend/src/components/MarkdownToolbar.vue @@ -1,130 +1,157 @@ diff --git a/frontend/src/views/NoteEditorView.vue b/frontend/src/views/NoteEditorView.vue index 014c9a2..e664048 100644 --- a/frontend/src/views/NoteEditorView.vue +++ b/frontend/src/views/NoteEditorView.vue @@ -321,7 +321,7 @@ onUnmounted(() => assist.clearSelection());
- Back + ← Notes @@ -575,8 +575,12 @@ onUnmounted(() => assist.clearSelection()); .body-tabs-row { display: flex; - flex-direction: column; - gap: 0.25rem; + flex-direction: row; + align-items: center; + gap: 0.75rem; + flex-wrap: wrap; + padding-bottom: 0.5rem; + border-bottom: 1px solid var(--color-border); } .editor-tabs { @@ -586,7 +590,7 @@ onUnmounted(() => assist.clearSelection()); border-radius: 8px; padding: 2px; gap: 2px; - align-self: flex-start; + flex-shrink: 0; } .tab { diff --git a/frontend/src/views/NoteViewerView.vue b/frontend/src/views/NoteViewerView.vue index 142dcbf..a91ab2b 100644 --- a/frontend/src/views/NoteViewerView.vue +++ b/frontend/src/views/NoteViewerView.vue @@ -138,7 +138,20 @@ async function convertToTask() {