diff --git a/frontend/src/App.vue b/frontend/src/App.vue index 25b887f..044e3d6 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -300,7 +300,7 @@ onUnmounted(() => { .shortcuts-overlay { position: fixed; inset: 0; - background: var(--color-overlay, rgba(0, 0, 0, 0.45)); + background: var(--color-overlay); z-index: 9000; display: flex; align-items: center; @@ -309,8 +309,8 @@ onUnmounted(() => { .shortcuts-panel { background: var(--color-bg-card); border: 1px solid var(--color-border); - border-radius: var(--radius-md, 8px); - box-shadow: 0 8px 32px var(--color-shadow, rgba(0,0,0,0.2)); + border-radius: var(--radius-md); + box-shadow: 0 8px 32px var(--color-shadow); width: min(420px, 92vw); overflow: hidden; } diff --git a/frontend/src/assets/editor-shared.css b/frontend/src/assets/editor-shared.css index eaecc14..fa0af46 100644 --- a/frontend/src/assets/editor-shared.css +++ b/frontend/src/assets/editor-shared.css @@ -98,8 +98,8 @@ color: var(--fs-text-on-action); } .tag-pill.applied { - background: var(--color-success, #2ecc71); - border-color: var(--color-success, #2ecc71); + background: var(--color-success); + border-color: var(--color-success); color: var(--fs-text-on-action); cursor: default; } diff --git a/frontend/src/assets/prose.css b/frontend/src/assets/prose.css index b3cf455..6056d48 100644 --- a/frontend/src/assets/prose.css +++ b/frontend/src/assets/prose.css @@ -219,7 +219,7 @@ } .tiptap-editor .ProseMirror p.is-editor-empty:first-child::before { - color: var(--color-text-muted, var(--color-text-secondary)); + color: var(--color-text-muted); content: attr(data-placeholder); float: left; height: 0; @@ -234,5 +234,5 @@ } .tiptap-wrapper:focus-within { - box-shadow: var(--focus-ring, 0 0 0 2px var(--color-primary)); + box-shadow: var(--focus-ring); } diff --git a/frontend/src/components/DiffView.vue b/frontend/src/components/DiffView.vue index 95531c0..01fb67f 100644 --- a/frontend/src/components/DiffView.vue +++ b/frontend/src/components/DiffView.vue @@ -110,8 +110,8 @@ function markerFor(type: DiffLine['type']): string { font-weight: 600; } -.diff-summary-ins { color: var(--color-success, #2ecc71); } -.diff-summary-del { color: var(--color-danger, #e74c3c); } +.diff-summary-ins { color: var(--color-success); } +.diff-summary-del { color: var(--color-danger); } .diff-scroll { flex: 1; @@ -136,13 +136,13 @@ function markerFor(type: DiffLine['type']): string { } .diff-delete { - background: color-mix(in srgb, var(--color-danger, #e74c3c) 12%, transparent); - color: var(--color-danger, #e74c3c); + background: color-mix(in srgb, var(--color-danger) 12%, transparent); + color: var(--color-danger); } .diff-insert { - background: color-mix(in srgb, var(--color-success, #2ecc71) 12%, transparent); - color: var(--color-success, #2ecc71); + background: color-mix(in srgb, var(--color-success) 12%, transparent); + color: var(--color-success); } .diff-equal { diff --git a/frontend/src/components/HistoryPanel.vue b/frontend/src/components/HistoryPanel.vue index a4ddd89..4b2211f 100644 --- a/frontend/src/components/HistoryPanel.vue +++ b/frontend/src/components/HistoryPanel.vue @@ -403,12 +403,12 @@ onMounted(loadVersions); font-size: 0.85em; line-height: 1; } -.pin-badge-manual { color: var(--color-primary, #6366f1); } -.pin-badge-auto { color: var(--color-text-muted, rgba(255, 255, 255, 0.5)); } +.pin-badge-manual { color: var(--color-primary); } +.pin-badge-auto { color: var(--color-text-muted); } .history-item-label { font-size: 0.72rem; - color: var(--color-primary, #6366f1); + color: var(--color-primary); font-style: italic; margin-top: 0.15rem; overflow: hidden; @@ -430,7 +430,7 @@ onMounted(loadVersions); } .pin-state { font-style: italic; - color: var(--color-text-muted, rgba(255, 255, 255, 0.6)); + color: var(--color-text-muted); flex: 1; min-width: 0; overflow: hidden; @@ -442,13 +442,13 @@ onMounted(loadVersions); font-size: 0.78rem; background: transparent; color: inherit; - border: 1px solid var(--color-border, rgba(255, 255, 255, 0.12)); + border: 1px solid var(--color-border); border-radius: 999px; cursor: pointer; } .btn-pin:hover:not(:disabled), .btn-pin-edit:hover:not(:disabled) { background: rgba(99, 102, 241, 0.12); - border-color: var(--color-primary, #6366f1); + border-color: var(--color-primary); } .btn-unpin:hover:not(:disabled) { background: rgba(239, 68, 68, 0.10); @@ -463,27 +463,27 @@ onMounted(loadVersions); flex: 1; padding: 0.3rem 0.5rem; font-size: 0.85rem; - background: var(--color-input-bg, rgba(255, 255, 255, 0.03)); - border: 1px solid var(--color-border, rgba(255, 255, 255, 0.12)); - border-radius: var(--radius-sm, 4px); + background: var(--color-input-bg); + border: 1px solid var(--color-border); + border-radius: var(--radius-sm); color: inherit; } .pin-label-input:focus { outline: none; - border-color: var(--color-primary, #6366f1); + border-color: var(--color-primary); } .btn-pin-save, .btn-pin-cancel { padding: 0.3rem 0.7rem; font-size: 0.78rem; background: transparent; color: inherit; - border: 1px solid var(--color-border, rgba(255, 255, 255, 0.12)); - border-radius: var(--radius-sm, 4px); + border: 1px solid var(--color-border); + border-radius: var(--radius-sm); cursor: pointer; } .btn-pin-save:hover:not(:disabled) { background: rgba(99, 102, 241, 0.12); - border-color: var(--color-primary, #6366f1); + border-color: var(--color-primary); } .btn-pin-save:disabled, .btn-pin-cancel:disabled, .btn-pin:disabled, .btn-pin-edit:disabled, .btn-unpin:disabled { diff --git a/frontend/src/components/InlineAssistPanel.vue b/frontend/src/components/InlineAssistPanel.vue index f43dceb..741a5e0 100644 --- a/frontend/src/components/InlineAssistPanel.vue +++ b/frontend/src/components/InlineAssistPanel.vue @@ -135,8 +135,8 @@ const markers: Record = { flex-shrink: 0; } .iap-btn-cancel:hover { - border-color: var(--color-danger, #e74c3c); - color: var(--color-danger, #e74c3c); + border-color: var(--color-danger); + color: var(--color-danger); } .iap-stream-preview { @@ -191,19 +191,19 @@ const markers: Record = { font-weight: var(--fs-weight-medium); } .iap-btn-accept { - background: var(--color-success, #22c55e); + background: var(--color-success); color: var(--fs-text-on-action); } .iap-btn-accept:hover { opacity: 0.85; } .iap-btn-reject { - background: var(--color-bg-card, var(--color-bg)); + background: var(--color-bg-card); color: var(--color-text-secondary); border: 1px solid var(--color-border); } .iap-btn-reject:hover { - border-color: var(--color-danger, #e74c3c); - color: var(--color-danger, #e74c3c); + border-color: var(--color-danger); + color: var(--color-danger); } /* ── Diff ── */ @@ -226,12 +226,12 @@ const markers: Record = { .iap-diff-equal { color: var(--color-text-muted); } .iap-diff-delete { - background: color-mix(in srgb, var(--color-danger, #e74c3c) 10%, transparent); - color: var(--color-danger, #e74c3c); + background: color-mix(in srgb, var(--color-danger) 10%, transparent); + color: var(--color-danger); } .iap-diff-insert { - background: color-mix(in srgb, var(--color-success, #22c55e) 10%, transparent); - color: var(--color-success, #22c55e); + background: color-mix(in srgb, var(--color-success) 10%, transparent); + color: var(--color-success); } .iap-diff-marker { diff --git a/frontend/src/components/NotificationBell.vue b/frontend/src/components/NotificationBell.vue index d24c659..d3318d5 100644 --- a/frontend/src/components/NotificationBell.vue +++ b/frontend/src/components/NotificationBell.vue @@ -81,7 +81,7 @@ onUnmounted(() => { position: absolute; top: -5px; right: -5px; - background: var(--color-danger, #ef4444); + background: var(--color-danger); color: var(--fs-text-on-action); font-size: 0.6rem; font-weight: 700; diff --git a/frontend/src/components/RecurrenceEditor.vue b/frontend/src/components/RecurrenceEditor.vue index 092426f..865e054 100644 --- a/frontend/src/components/RecurrenceEditor.vue +++ b/frontend/src/components/RecurrenceEditor.vue @@ -159,7 +159,7 @@ const calendarDayMax = computed(() => .rec-num-input { width: 4rem; padding: 0.25rem 0.4rem; - border: 1px solid var(--color-input-border, var(--color-border)); + border: 1px solid var(--color-input-border); border-radius: var(--radius-sm); background: var(--color-bg); color: var(--color-text); diff --git a/frontend/src/components/SystemsSection.vue b/frontend/src/components/SystemsSection.vue index 1564790..b7b963d 100644 --- a/frontend/src/components/SystemsSection.vue +++ b/frontend/src/components/SystemsSection.vue @@ -445,7 +445,7 @@ async function confirmDelete() { } .action-btn:hover { background: var(--color-bg-secondary); color: var(--color-text); } .action-btn:focus-visible { outline: 2px solid var(--color-primary); outline-offset: 1px; opacity: 1; } -.action-delete:hover { color: var(--color-danger, #e74c3c); } +.action-delete:hover { color: var(--color-danger); } /* ── Empty ────────────────────────────────────────────────────── */ .systems-empty { @@ -483,7 +483,7 @@ async function confirmDelete() { /* ── Modal ────────────────────────────────────────────────────── */ .modal-overlay { position: fixed; inset: 0; - background: var(--color-overlay, rgba(0,0,0,0.45)); + background: var(--color-overlay); display: flex; align-items: center; justify-content: center; z-index: 200; } diff --git a/frontend/src/components/TagInput.vue b/frontend/src/components/TagInput.vue index 7fc8a1f..833f4e4 100644 --- a/frontend/src/components/TagInput.vue +++ b/frontend/src/components/TagInput.vue @@ -222,7 +222,7 @@ function focusInput() { } .tag-autocomplete-item:hover, .tag-autocomplete-item.selected { - background: var(--color-bg-hover, color-mix(in srgb, var(--color-primary) 8%, transparent)); + background: var(--color-bg-hover); color: var(--color-primary); } diff --git a/frontend/src/components/TaskCard.vue b/frontend/src/components/TaskCard.vue index d933760..9bb9179 100644 --- a/frontend/src/components/TaskCard.vue +++ b/frontend/src/components/TaskCard.vue @@ -144,19 +144,19 @@ function isOverdue(): boolean { opacity: 0.8; } .dot-todo { - background: var(--color-status-todo, #94a3b8); - border: 2px solid var(--color-status-todo, #94a3b8); + background: var(--color-status-todo); + border: 2px solid var(--color-status-todo); background: transparent; border: 2px solid var(--color-text-muted); } .dot-in-progress { - background: var(--color-status-in-progress, #3b82f6); + background: var(--color-status-in-progress); } .dot-done { - background: var(--color-status-done, #22c55e); + background: var(--color-status-done); } .dot-cancelled { - background: var(--color-status-cancelled, #6b7280); + background: var(--color-status-cancelled); } .task-title-compact { @@ -190,7 +190,7 @@ function isOverdue(): boolean { flex-shrink: 0; } .due-compact.overdue { - color: var(--color-danger, #e74c3c); + color: var(--color-danger); font-weight: 600; } /* Full layout */ diff --git a/frontend/src/components/WorkspaceNoteEditor.vue b/frontend/src/components/WorkspaceNoteEditor.vue index f44855f..83fe67f 100644 --- a/frontend/src/components/WorkspaceNoteEditor.vue +++ b/frontend/src/components/WorkspaceNoteEditor.vue @@ -463,7 +463,7 @@ defineExpose({ reload: loadProjectNotes }); display: flex; flex-direction: column; overflow: hidden; - background: var(--color-bg-card, var(--color-bg-secondary)); + background: var(--color-bg-card); } .rail-header { diff --git a/frontend/src/components/WorkspaceTaskPanel.vue b/frontend/src/components/WorkspaceTaskPanel.vue index 4f6d305..bc32830 100644 --- a/frontend/src/components/WorkspaceTaskPanel.vue +++ b/frontend/src/components/WorkspaceTaskPanel.vue @@ -387,7 +387,7 @@ defineExpose({ reload: loadAll }); .task-add-input { flex: 1; - background: var(--color-input-bg, var(--color-bg)); + background: var(--color-input-bg); border: 1px solid var(--color-border); border-radius: 5px; padding: 0.28rem 0.5rem; @@ -413,7 +413,7 @@ defineExpose({ reload: loadAll }); gap: 0.4rem; width: 100%; padding: 0.4rem 0.65rem; - background: var(--color-surface-raised, color-mix(in srgb, var(--color-surface) 92%, var(--color-text))); + background: var(--color-surface-raised); border: none; cursor: pointer; text-align: left; @@ -433,7 +433,7 @@ defineExpose({ reload: loadAll }); text-transform: capitalize; } .ms-status-active { background: color-mix(in srgb, var(--color-primary) 15%, transparent); color: var(--color-primary); } -.ms-status-completed { background: color-mix(in srgb, var(--color-success, #27ae60) 15%, transparent); color: var(--color-success, #27ae60); } +.ms-status-completed { background: color-mix(in srgb, var(--color-success) 15%, transparent); color: var(--color-success); } .task-items { list-style: none; @@ -466,7 +466,7 @@ defineExpose({ reload: loadAll }); justify-content: center; } .status-dot.status-in_progress { border-color: var(--color-primary); color: var(--color-primary); } -.status-dot.status-done { border-color: var(--color-success, #27ae60); color: var(--color-success, #27ae60); } +.status-dot.status-done { border-color: var(--color-success); color: var(--color-success); } .task-title { flex: 1; @@ -522,7 +522,7 @@ defineExpose({ reload: loadAll }); margin-left: auto; } .status-badge.status-in_progress { border-color: var(--color-primary); color: var(--color-primary); background: color-mix(in srgb, var(--color-primary) 10%, transparent); } -.status-badge.status-done { border-color: var(--color-success, #27ae60); color: var(--color-success, #27ae60); background: color-mix(in srgb, var(--color-success, #27ae60) 10%, transparent); } +.status-badge.status-done { border-color: var(--color-success); color: var(--color-success); background: color-mix(in srgb, var(--color-success) 10%, transparent); } .btn-edit-task { margin-left: 0.25rem; } .btn-edit-task:hover { text-decoration: underline; } @@ -614,7 +614,7 @@ defineExpose({ reload: loadAll }); flex-shrink: 0; } .task-due.overdue { - color: var(--color-danger, #e74c3c); + color: var(--color-danger); font-weight: 500; } diff --git a/frontend/src/components/rules/PlanRulesPanel.vue b/frontend/src/components/rules/PlanRulesPanel.vue index 4cab350..1796b87 100644 --- a/frontend/src/components/rules/PlanRulesPanel.vue +++ b/frontend/src/components/rules/PlanRulesPanel.vue @@ -46,7 +46,7 @@ watch(() => props.projectId, load); diff --git a/frontend/src/components/rules/RuleEditorSlideOver.vue b/frontend/src/components/rules/RuleEditorSlideOver.vue index 72e1c6c..fee2105 100644 --- a/frontend/src/components/rules/RuleEditorSlideOver.vue +++ b/frontend/src/components/rules/RuleEditorSlideOver.vue @@ -98,8 +98,8 @@ watch(() => props.ruleId, load); .slide-over { position: fixed; top: 0; right: 0; bottom: 0; width: min(520px, 90vw); - background: var(--color-surface, #18181b); - border-left: 2px solid var(--color-primary, #6366f1); + background: var(--color-surface); + border-left: 2px solid var(--color-primary); padding: 1.5rem; overflow-y: auto; box-shadow: -8px 0 32px rgba(0, 0, 0, 0.3); @@ -110,11 +110,11 @@ header h2 { font-family: Fraunces, serif; font-style: italic; } label { display: block; margin-bottom: 1rem; } -.required { color: var(--color-primary, #6366f1); } +.required { color: var(--color-primary); } input, textarea { width: 100%; margin-top: 0.25rem; - background: var(--color-bg, #111113); color: inherit; - border: 1px solid var(--color-border, #2a2a2e); border-radius: 6px; + background: var(--color-bg); color: inherit; + border: 1px solid var(--color-border); border-radius: 6px; padding: 0.5rem; font: inherit; font-family: inherit; } diff --git a/frontend/src/components/rules/RuleListPane.vue b/frontend/src/components/rules/RuleListPane.vue index 65ecac4..b33bd6a 100644 --- a/frontend/src/components/rules/RuleListPane.vue +++ b/frontend/src/components/rules/RuleListPane.vue @@ -22,18 +22,18 @@ const emit = defineEmits<{ \ No newline at end of file diff --git a/frontend/src/views/TaskViewerView.vue b/frontend/src/views/TaskViewerView.vue index 2cc007d..a05e60f 100644 --- a/frontend/src/views/TaskViewerView.vue +++ b/frontend/src/views/TaskViewerView.vue @@ -561,7 +561,7 @@ const subTaskProgress = computed(() => { } .subtasks-fill { height: 100%; - background: var(--color-status-done, #22c55e); + background: var(--color-status-done); border-radius: 2px; transition: width 0.3s ease; } @@ -602,13 +602,13 @@ const subTaskProgress = computed(() => { border: 2px solid var(--color-text-muted); } .dot-in-progress { - background: var(--color-status-in-progress, #3b82f6); + background: var(--color-status-in-progress); } .dot-done { - background: var(--color-status-done, #22c55e); + background: var(--color-status-done); } .dot-cancelled { - background: var(--color-text-muted, #6b7280); + background: var(--color-text-muted); } .sub-title { flex: 1; @@ -749,26 +749,26 @@ const subTaskProgress = computed(() => { /* ── Goal block + auto-summary banner ─────────────────────────────────────── */ .task-goal-display { - border-left: 2px solid var(--color-border, rgba(255, 255, 255, 0.12)); + border-left: 2px solid var(--color-border); padding: 0.4rem 0 0.4rem 0.9rem; margin: 0.75rem 0 1.25rem; background: rgba(255, 255, 255, 0.02); } .goal-label { - font-family: var(--font-display, "Fraunces", serif); + font-family: var(--font-display); font-style: italic; font-size: 0.78rem; font-weight: 500; letter-spacing: 0.04em; text-transform: uppercase; - color: var(--color-text-muted, rgba(255, 255, 255, 0.5)); + color: var(--color-text-muted); margin: 0 0 0.25rem; } .goal-text { margin: 0; font-size: 0.95rem; line-height: 1.45; - color: var(--color-text, inherit); + color: var(--color-text); white-space: pre-wrap; } .auto-summary-banner { @@ -777,11 +777,11 @@ const subTaskProgress = computed(() => { gap: 0.5rem; font-size: 0.78rem; font-style: italic; - color: var(--color-text-muted, rgba(255, 255, 255, 0.55)); + color: var(--color-text-muted); margin: 0 0 0.75rem; } .auto-summary-icon { - color: var(--color-primary, #6366f1); + color: var(--color-primary); font-size: 0.85rem; } diff --git a/frontend/src/views/TrashView.vue b/frontend/src/views/TrashView.vue index 8c087e3..e954f60 100644 --- a/frontend/src/views/TrashView.vue +++ b/frontend/src/views/TrashView.vue @@ -68,7 +68,7 @@ onMounted(() => store.fetchTrash()); .batch-count { opacity: 0.6; font-weight: 400; font-size: 0.9em; margin-left: 0.35rem; } .batch-meta { font-size: 0.82em; opacity: 0.6; margin-top: 0.25rem; } .batch-actions { display: flex; gap: 0.5rem; flex-shrink: 0; } -.batch-actions button { border-radius: 6px; padding: 0.35rem 0.7rem; cursor: pointer; border: 1px solid var(--color-border, #2a2a2e); background: none; color: inherit; } +.batch-actions button { border-radius: 6px; padding: 0.35rem 0.7rem; cursor: pointer; border: 1px solid var(--color-border); background: none; color: inherit; } .btn-restore:hover { border-color: var(--color-action-primary); color: var(--color-action-primary); } .btn-purge:hover { border-color: var(--color-action-destructive); color: var(--color-action-destructive); }