@@ -325,41 +325,41 @@ async function confirmDelete() {
/* ── Open issues ──────────────────────────────────────────────── */
.open-issues { display: flex; flex-direction: column; gap: 0.35rem; }
-.open-issues-label { font-size: 0.72rem; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase; color: var(--color-text-muted); }
+.open-issues-label { font-size: 0.72rem; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase; color: var(--fs-text-tertiary); }
.issue-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 0.2rem; }
-.issue-link { display: flex; align-items: center; gap: 0.5rem; padding: 0.35rem 0.5rem; border-radius: var(--radius-sm); text-decoration: none; color: var(--color-text); font-size: 0.85rem; }
-.issue-link:hover { background: var(--color-bg-secondary); }
-.issue-mark { color: var(--color-text-muted); flex-shrink: 0; }
-.issue-mark.imk-in_progress { color: var(--color-primary); }
+.issue-link { display: flex; align-items: center; gap: 0.5rem; padding: 0.35rem 0.5rem; border-radius: var(--fs-radius-sm); text-decoration: none; color: var(--fs-text-primary); font-size: 0.85rem; }
+.issue-link:hover { background: var(--fs-surface-raised); }
+.issue-mark { color: var(--fs-text-tertiary); flex-shrink: 0; }
+.issue-mark.imk-in_progress { color: var(--fs-accent); }
.issue-name { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.issue-systems { display: flex; gap: 0.25rem; flex-shrink: 0; flex-wrap: wrap; }
-.issue-sys-chip { font-size: 0.66rem; color: var(--color-text-secondary); background: var(--color-bg-secondary); border-radius: 999px; padding: 0.05rem 0.4rem; }
+.issue-sys-chip { font-size: 0.66rem; color: var(--fs-text-secondary); background: var(--fs-surface-raised); border-radius: 999px; padding: 0.05rem 0.4rem; }
/* ── Toolbar ──────────────────────────────────────────────────── */
.systems-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 0.75rem; }
.btn-add-system {
background: none;
- border: 1px dashed var(--color-border);
- color: var(--color-text-secondary);
+ border: 1px dashed var(--fs-border-color);
+ color: var(--fs-text-secondary);
padding: 0.28rem 0.65rem;
- border-radius: var(--radius-sm);
+ border-radius: var(--fs-radius-sm);
cursor: pointer;
font-size: 0.78rem;
font-family: inherit;
}
-.btn-add-system:hover { border-color: var(--color-primary); color: var(--color-primary); }
-.btn-add-system:focus-visible { outline: none; border-color: var(--color-primary); color: var(--color-primary); }
+.btn-add-system:hover { border-color: var(--fs-accent); color: var(--fs-accent); }
+.btn-add-system:focus-visible { outline: none; border-color: var(--fs-accent); color: var(--fs-accent); }
.archived-toggle {
display: inline-flex;
align-items: center;
gap: 0.4rem;
font-size: 0.78rem;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
cursor: pointer;
user-select: none;
}
-.archived-checkbox { accent-color: var(--color-primary); cursor: pointer; }
+.archived-checkbox { accent-color: var(--fs-accent); cursor: pointer; }
/* ── Create / edit form ───────────────────────────────────────── */
.system-form {
@@ -367,23 +367,23 @@ async function confirmDelete() {
flex-direction: column;
gap: 0.5rem;
padding: 0.75rem;
- background: var(--color-bg-card);
- border: 1px solid var(--color-border);
- border-radius: var(--radius-md);
+ background: var(--fs-surface-raised);
+ border: 1px solid var(--fs-border-color);
+ border-radius: var(--fs-radius-lg);
}
.system-form--inline { padding: 0; background: none; border: none; flex: 1; }
.system-input, .system-textarea {
padding: 0.4rem 0.6rem;
- border: 1px solid var(--color-border);
- border-radius: var(--radius-sm);
- background: var(--color-bg);
- color: var(--color-text);
+ border: 1px solid var(--fs-border-color);
+ border-radius: var(--fs-radius-sm);
+ background: var(--fs-surface-page);
+ color: var(--fs-text-primary);
font-size: 0.875rem;
font-family: inherit;
box-sizing: border-box;
width: 100%;
}
-.system-input:focus, .system-textarea:focus { outline: none; border-color: var(--color-primary); }
+.system-input:focus, .system-textarea:focus { outline: none; border-color: var(--fs-accent); }
.system-textarea { resize: vertical; }
.system-form-actions { display: flex; gap: 0.4rem; }
@@ -417,9 +417,9 @@ async function confirmDelete() {
align-items: flex-start;
gap: 0.6rem;
padding: 0.6rem 0.75rem;
- background: var(--color-bg-card);
- border: 1px solid var(--color-border);
- border-radius: var(--radius-md);
+ background: var(--fs-surface-raised);
+ border: 1px solid var(--fs-border-color);
+ border-radius: var(--fs-radius-lg);
}
.system-card--archived { opacity: 0.6; }
@@ -433,13 +433,13 @@ async function confirmDelete() {
}
.system-body { flex: 1; min-width: 0; }
.system-name-row { display: flex; align-items: center; gap: 0.5rem; flex-wrap: wrap; }
-.system-name { font-weight: 500; color: var(--color-text); word-break: break-word; }
+.system-name { font-weight: 500; color: var(--fs-text-primary); word-break: break-word; }
.issue-badge {
font-size: 0.7rem;
font-weight: 500;
- background: color-mix(in srgb, var(--color-primary) 12%, transparent);
- border: 1px solid color-mix(in srgb, var(--color-primary) 30%, transparent);
- color: var(--color-primary);
+ background: color-mix(in srgb, var(--fs-accent) 12%, transparent);
+ border: 1px solid color-mix(in srgb, var(--fs-accent) 30%, transparent);
+ color: var(--fs-accent);
border-radius: 999px;
padding: 0.05rem 0.45rem;
flex-shrink: 0;
@@ -449,15 +449,15 @@ async function confirmDelete() {
font-weight: 500;
text-transform: uppercase;
letter-spacing: 0.04em;
- color: var(--color-text-muted);
- background: color-mix(in srgb, var(--color-text-muted) 12%, transparent);
+ color: var(--fs-text-tertiary);
+ background: color-mix(in srgb, var(--fs-text-tertiary) 12%, transparent);
border-radius: 999px;
padding: 0.05rem 0.45rem;
}
.system-description {
margin: 0.25rem 0 0;
font-size: 0.82rem;
- color: var(--color-text-secondary);
+ color: var(--fs-text-secondary);
line-height: 1.4;
word-break: break-word;
}
@@ -472,15 +472,15 @@ async function confirmDelete() {
background: none;
border: none;
cursor: pointer;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
width: 26px;
height: 26px;
- border-radius: var(--radius-sm);
+ border-radius: var(--fs-radius-sm);
transition: background 0.12s, color 0.12s;
}
-.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); }
+.action-btn:hover { background: var(--fs-surface-raised); color: var(--fs-text-primary); }
+.action-btn:focus-visible { outline: 2px solid var(--fs-accent); outline-offset: 1px; opacity: 1; }
+.action-delete:hover { color: var(--fs-error); }
/* ── Empty ────────────────────────────────────────────────────── */
.systems-empty {
@@ -490,25 +490,25 @@ async function confirmDelete() {
gap: 0.4rem;
padding: 2rem 1rem;
text-align: center;
- border: 1px dashed var(--color-border);
- border-radius: var(--radius-md);
+ border: 1px dashed var(--fs-border-color);
+ border-radius: var(--fs-radius-lg);
}
-.empty-title { margin: 0; font-weight: 500; color: var(--color-text); }
-.empty-sub { margin: 0 0 0.5rem; font-size: 0.82rem; color: var(--color-text-muted); max-width: 32ch; }
+.empty-title { margin: 0; font-weight: 500; color: var(--fs-text-primary); }
+.empty-sub { margin: 0 0 0.5rem; font-size: 0.82rem; color: var(--fs-text-tertiary); max-width: 32ch; }
-.error-msg { color: var(--color-danger); font-size: 0.9rem; }
+.error-msg { color: var(--fs-error); font-size: 0.9rem; }
/* ── Skeleton ─────────────────────────────────────────────────── */
@keyframes skel-shine { to { background-position: 200% center; } }
.systems-skeleton { display: flex; flex-direction: column; gap: 0.4rem; }
.skel-row {
height: 3rem;
- border-radius: var(--radius-md);
+ border-radius: var(--fs-radius-lg);
background: linear-gradient(
90deg,
- var(--color-bg-secondary) 25%,
- color-mix(in srgb, var(--color-text-muted) 16%, var(--color-bg-secondary)) 50%,
- var(--color-bg-secondary) 75%
+ var(--fs-surface-raised) 25%,
+ color-mix(in srgb, var(--fs-text-tertiary) 16%, var(--fs-surface-raised)) 50%,
+ var(--fs-surface-raised) 75%
);
background-size: 200% 100%;
animation: skel-shine 1.5s ease infinite;
@@ -518,33 +518,33 @@ async function confirmDelete() {
/* ── Modal ────────────────────────────────────────────────────── */
.modal-overlay {
position: fixed; inset: 0;
- background: var(--color-overlay);
+ background: var(--fs-overlay);
display: flex; align-items: center; justify-content: center;
z-index: 200;
}
.modal-card {
- background: var(--color-bg-card);
- border: 1px solid var(--color-border);
- border-radius: var(--radius-md);
+ background: var(--fs-surface-raised);
+ border: 1px solid var(--fs-border-color);
+ border-radius: var(--fs-radius-lg);
padding: 1.5rem;
width: 100%;
max-width: 400px;
box-shadow: 0 8px 32px var(--color-shadow);
}
.modal-title { margin: 0 0 0.75rem; font-size: 1.05rem; }
-.modal-message { font-size: 0.9rem; color: var(--color-text-secondary); margin: 0 0 1.25rem; line-height: 1.5; }
+.modal-message { font-size: 0.9rem; color: var(--fs-text-secondary); margin: 0 0 1.25rem; line-height: 1.5; }
.modal-actions { display: flex; justify-content: flex-end; gap: 0.5rem; }
.modal-btn {
padding: 0.4rem 0.9rem;
- border: 1px solid var(--color-border);
- background: var(--color-bg-secondary);
- color: var(--color-text);
- border-radius: var(--radius-sm);
+ border: 1px solid var(--fs-border-color);
+ background: var(--fs-surface-raised);
+ color: var(--fs-text-primary);
+ border-radius: var(--fs-radius-sm);
cursor: pointer;
font-size: 0.875rem;
font-family: inherit;
}
-.modal-btn:hover { background: var(--color-bg); }
-.modal-btn-danger { background: var(--color-action-destructive); border-color: var(--color-action-destructive); color: var(--fs-text-on-action); }
-.modal-btn-danger:hover { background: var(--color-action-destructive-hover); border-color: var(--color-action-destructive-hover); }
+.modal-btn:hover { background: var(--fs-surface-page); }
+.modal-btn-danger { background: var(--fs-action-destructive); border-color: var(--fs-action-destructive); color: var(--fs-text-on-action); }
+.modal-btn-danger:hover { background: var(--fs-action-destructive-hover); border-color: var(--fs-action-destructive-hover); }
diff --git a/frontend/src/components/TableOfContents.vue b/frontend/src/components/TableOfContents.vue
index 8981dda..3496fc7 100644
--- a/frontend/src/components/TableOfContents.vue
+++ b/frontend/src/components/TableOfContents.vue
@@ -60,7 +60,7 @@ function scrollTo(id: string) {
.toc-title {
font-size: 0.8rem;
text-transform: uppercase;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
margin: 0 0 0.5rem;
letter-spacing: 0.05em;
}
@@ -73,11 +73,11 @@ function scrollTo(id: string) {
margin-bottom: 0.25rem;
}
.toc-link {
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
text-decoration: none;
cursor: pointer;
}
.toc-link:hover {
- color: var(--color-primary);
+ color: var(--fs-accent);
}
diff --git a/frontend/src/components/TagInput.vue b/frontend/src/components/TagInput.vue
index 833f4e4..986225b 100644
--- a/frontend/src/components/TagInput.vue
+++ b/frontend/src/components/TagInput.vue
@@ -154,9 +154,9 @@ function focusInput() {
align-items: center;
gap: 0.35rem;
padding: 0.35rem 0.6rem;
- border: 1px solid var(--color-input-border);
- border-radius: var(--radius-sm);
- background: var(--color-bg-card);
+ border: 1px solid var(--fs-border-color);
+ border-radius: var(--fs-radius-sm);
+ background: var(--fs-surface-raised);
cursor: text;
min-height: 2.25rem;
}
@@ -166,9 +166,9 @@ function focusInput() {
gap: 0.2rem;
padding: 0.15rem 0.5rem;
border-radius: 999px;
- background: color-mix(in srgb, var(--color-primary) 15%, transparent);
- border: 1px solid var(--color-primary);
- color: var(--color-primary);
+ background: color-mix(in srgb, var(--fs-accent) 15%, transparent);
+ border: 1px solid var(--fs-accent);
+ color: var(--fs-accent);
font-size: 0.8rem;
white-space: nowrap;
}
@@ -195,7 +195,7 @@ function focusInput() {
border: none;
outline: none;
background: transparent;
- color: var(--color-text);
+ color: var(--fs-text-primary);
font-size: 0.875rem;
padding: 0;
}
@@ -205,9 +205,9 @@ function focusInput() {
left: 0;
min-width: 160px;
max-width: 280px;
- background: var(--color-bg-card);
- border: 1px solid var(--color-border);
- border-radius: var(--radius-sm);
+ background: var(--fs-surface-raised);
+ border: 1px solid var(--fs-border-color);
+ border-radius: var(--fs-radius-sm);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
list-style: none;
margin: 0;
@@ -218,11 +218,11 @@ function focusInput() {
padding: 0.35rem 0.75rem;
font-size: 0.85rem;
cursor: pointer;
- color: var(--color-text);
+ color: var(--fs-text-primary);
}
.tag-autocomplete-item:hover,
.tag-autocomplete-item.selected {
- background: var(--color-bg-hover);
- color: var(--color-primary);
+ background: var(--fs-surface-hover);
+ color: var(--fs-accent);
}
diff --git a/frontend/src/components/TagPill.vue b/frontend/src/components/TagPill.vue
index 185599c..da7ecdf 100644
--- a/frontend/src/components/TagPill.vue
+++ b/frontend/src/components/TagPill.vue
@@ -29,8 +29,8 @@ defineEmits<{
display: inline-flex;
align-items: center;
gap: 0.25rem;
- background: var(--color-tag-bg);
- color: var(--color-tag-text);
+ background: var(--fs-accent-soft);
+ color: var(--fs-accent);
padding: 0.15rem 0.5rem;
border-radius: 12px;
font-size: 0.8rem;
@@ -39,13 +39,13 @@ defineEmits<{
transition: color 0.15s, background 0.15s;
}
.tag-pill:hover {
- color: var(--color-primary);
- background: var(--color-primary-tint);
+ color: var(--fs-accent);
+ background: var(--fs-accent-soft);
}
.dismiss {
background: none;
border: none;
- color: var(--color-tag-text);
+ color: var(--fs-accent);
cursor: pointer;
font-size: 0.9rem;
line-height: 1;
diff --git a/frontend/src/components/TaskCard.vue b/frontend/src/components/TaskCard.vue
index 307d9d2..52e4238 100644
--- a/frontend/src/components/TaskCard.vue
+++ b/frontend/src/components/TaskCard.vue
@@ -108,15 +108,15 @@ function isOverdue(): boolean {
.task-card {
display: block;
padding: 1rem;
- border-radius: var(--radius-md);
+ border-radius: var(--fs-radius-lg);
text-decoration: none;
color: inherit;
- background: var(--color-bg-card);
- box-shadow: 0 1px 4px rgba(0, 0, 0, 0.06), 0 0 0 1px color-mix(in srgb, var(--color-primary) 6%, transparent);
+ background: var(--fs-surface-raised);
+ box-shadow: 0 1px 4px rgba(0, 0, 0, 0.06), 0 0 0 1px color-mix(in srgb, var(--fs-accent) 6%, transparent);
transition: box-shadow 0.2s, transform 0.18s ease;
}
.task-card:hover {
- box-shadow: 0 4px 16px rgba(0, 0, 0, 0.10), 0 0 0 1px color-mix(in srgb, var(--color-primary) 14.0%, transparent);
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.10), 0 0 0 1px color-mix(in srgb, var(--fs-accent) 14.0%, transparent);
transform: translateY(-2px);
}
@@ -144,19 +144,19 @@ function isOverdue(): boolean {
opacity: 0.8;
}
.dot-todo {
- background: var(--color-status-todo);
- border: 2px solid var(--color-status-todo);
+ background: var(--fs-status-todo);
+ border: 2px solid var(--fs-status-todo);
background: transparent;
- border: 2px solid var(--color-text-muted);
+ border: 2px solid var(--fs-text-tertiary);
}
.dot-in-progress {
- background: var(--color-status-in-progress);
+ background: var(--fs-status-in-progress);
}
.dot-done {
- background: var(--color-status-done);
+ background: var(--fs-status-done);
}
.dot-cancelled {
- background: var(--color-status-cancelled);
+ background: var(--fs-status-cancelled);
}
.task-title-compact {
@@ -170,10 +170,10 @@ function isOverdue(): boolean {
}
.project-crumb {
font-size: 0.75rem;
- color: var(--color-text-muted);
- background: var(--color-bg-secondary);
- border: 1px solid var(--color-border);
- border-radius: var(--radius-sm);
+ color: var(--fs-text-tertiary);
+ background: var(--fs-surface-raised);
+ border: 1px solid var(--fs-border-color);
+ border-radius: var(--fs-radius-sm);
padding: 0.1rem 0.4rem;
white-space: nowrap;
flex-shrink: 0;
@@ -185,12 +185,12 @@ function isOverdue(): boolean {
}
.due-compact {
font-size: 0.75rem;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
white-space: nowrap;
flex-shrink: 0;
}
.due-compact.overdue {
- color: var(--color-danger);
+ color: var(--fs-error);
font-weight: 600;
}
/* Full layout */
@@ -211,7 +211,7 @@ function isOverdue(): boolean {
}
.task-preview {
margin: 0 0 0.5rem;
- color: var(--color-text-secondary);
+ color: var(--fs-text-secondary);
font-size: 0.9rem;
max-height: 7.5em;
overflow: hidden;
@@ -224,15 +224,15 @@ function isOverdue(): boolean {
}
.due-date {
font-size: 0.8rem;
- color: var(--color-text-secondary);
+ color: var(--fs-text-secondary);
}
.due-date.overdue {
- color: var(--color-overdue);
+ color: var(--fs-overdue);
font-weight: 600;
}
.timestamp {
margin-left: auto;
font-size: 0.75rem;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
}
diff --git a/frontend/src/components/TaskLogSection.vue b/frontend/src/components/TaskLogSection.vue
index e53c4dc..57c917b 100644
--- a/frontend/src/components/TaskLogSection.vue
+++ b/frontend/src/components/TaskLogSection.vue
@@ -175,9 +175,9 @@ onMounted(loadLogs);
diff --git a/frontend/src/components/ToastNotification.vue b/frontend/src/components/ToastNotification.vue
index b82e02b..a50e7dc 100644
--- a/frontend/src/components/ToastNotification.vue
+++ b/frontend/src/components/ToastNotification.vue
@@ -57,13 +57,13 @@ const toastStore = useToastStore();
color: var(--fs-text-on-action);
}
.toast--success {
- background: var(--color-toast-success);
+ background: var(--fs-success);
}
.toast--error {
- background: var(--color-toast-error);
+ background: var(--fs-error);
}
.toast--warning {
- background: var(--color-warning);
+ background: var(--fs-warning);
color: #1a1a1a;
}
.toast--warning .toast-close {
diff --git a/frontend/src/components/TokenPreview.vue b/frontend/src/components/TokenPreview.vue
index a2d5e5b..ad91337 100644
--- a/frontend/src/components/TokenPreview.vue
+++ b/frontend/src/components/TokenPreview.vue
@@ -183,22 +183,22 @@ function ruleWidth(value: string): string {
padding: 0.2rem 0.6rem;
font: inherit;
font-size: var(--fs-size-body-sm);
- color: var(--color-text-secondary);
+ color: var(--fs-text-secondary);
background: transparent;
- border: 1px solid var(--color-border);
+ border: 1px solid var(--fs-border-color);
border-radius: var(--fs-radius-sm);
cursor: pointer;
}
-.tp-mode:hover { color: var(--color-text); }
+.tp-mode:hover { color: var(--fs-text-primary); }
.tp-mode.active {
- color: var(--color-primary-solid);
- border-color: var(--color-primary);
- background: var(--color-primary-faint);
+ color: var(--fs-accent);
+ border-color: var(--fs-accent);
+ background: var(--fs-accent-faint);
}
.tp-modes-note {
font-size: var(--fs-size-tiny);
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
}
.tp-group { margin-bottom: var(--fs-space-6); }
@@ -207,7 +207,7 @@ function ruleWidth(value: string): string {
text-transform: uppercase;
letter-spacing: var(--fs-tracking-tiny);
font-size: var(--fs-size-tiny);
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
margin: 0 0 var(--fs-space-3);
padding-bottom: var(--fs-space-2);
border-bottom: var(--fs-border);
@@ -243,7 +243,7 @@ function ruleWidth(value: string): string {
border-radius: var(--fs-radius-sm);
padding: var(--fs-space-1);
overflow: hidden;
- background: var(--color-bg-secondary);
+ background: var(--fs-surface-raised);
}
/* Text-bearing specimens get no box at all — a border around a value is a
@@ -272,8 +272,8 @@ function ruleWidth(value: string): string {
background-image:
linear-gradient(var(--tp-fill), var(--tp-fill)),
repeating-conic-gradient(
- var(--color-border) 0% 25%,
- var(--color-bg-secondary) 0% 50%
+ var(--fs-border-color) 0% 25%,
+ var(--fs-surface-raised) 0% 50%
);
background-size: auto, 10px 10px;
}
@@ -282,7 +282,7 @@ function ruleWidth(value: string): string {
width: 100%;
height: 100%;
border-radius: calc(var(--fs-radius-sm) - 2px);
- background: var(--color-bg-card);
+ background: var(--fs-surface-raised);
}
.tp-rule-wrap {
@@ -297,27 +297,27 @@ function ruleWidth(value: string): string {
height: 0.4rem;
min-width: 1px;
flex: none;
- background: var(--color-primary-solid);
+ background: var(--fs-accent);
border-radius: 999px;
}
.tp-rule-label {
font-family: var(--fs-font-mono);
font-size: var(--fs-size-tiny);
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
white-space: nowrap;
}
.tp-font {
font-size: 1.4rem;
- color: var(--color-text);
+ color: var(--fs-text-primary);
line-height: 1;
}
.tp-plain {
font-family: var(--fs-font-mono);
font-size: var(--fs-size-code);
- color: var(--color-text-secondary);
+ color: var(--fs-text-secondary);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
@@ -325,7 +325,7 @@ function ruleWidth(value: string): string {
.tp-undecided {
font-size: var(--fs-size-tiny);
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
font-style: italic;
}
@@ -346,17 +346,17 @@ function ruleWidth(value: string): string {
.tp-name {
font-size: var(--fs-size-body-sm);
- color: var(--color-text);
+ color: var(--fs-text-primary);
}
.tp-value {
font-family: var(--fs-font-mono);
font-size: var(--fs-size-tiny);
- color: var(--color-text-secondary);
+ color: var(--fs-text-secondary);
}
.tp-purpose {
font-size: var(--fs-size-tiny);
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
}
diff --git a/frontend/src/components/VersionHistorySection.vue b/frontend/src/components/VersionHistorySection.vue
index 199d606..6c7cc16 100644
--- a/frontend/src/components/VersionHistorySection.vue
+++ b/frontend/src/components/VersionHistorySection.vue
@@ -164,7 +164,7 @@ function restore() {
diff --git a/frontend/src/components/WorkspaceNoteEditor.vue b/frontend/src/components/WorkspaceNoteEditor.vue
index 83fe67f..62b25c3 100644
--- a/frontend/src/components/WorkspaceNoteEditor.vue
+++ b/frontend/src/components/WorkspaceNoteEditor.vue
@@ -452,8 +452,8 @@ defineExpose({ reload: loadProjectNotes });
flex-direction: row;
height: 100%;
overflow: hidden;
- background: var(--color-surface);
- border-left: 1px solid var(--color-border);
+ background: var(--fs-surface-hover);
+ border-left: 1px solid var(--fs-border-color);
}
/* ── Left rail ── */
@@ -463,7 +463,7 @@ defineExpose({ reload: loadProjectNotes });
display: flex;
flex-direction: column;
overflow: hidden;
- background: var(--color-bg-card);
+ background: var(--fs-surface-raised);
}
.rail-header {
@@ -471,12 +471,12 @@ defineExpose({ reload: loadProjectNotes });
align-items: center;
gap: 0.3rem;
padding: 0.5rem 0.6rem;
- border-bottom: 1px solid var(--color-border);
+ border-bottom: 1px solid var(--fs-border-color);
flex-shrink: 0;
}
.rail-title {
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
text-transform: uppercase;
letter-spacing: 0.04em;
font-size: 0.72rem;
@@ -490,7 +490,7 @@ defineExpose({ reload: loadProjectNotes });
background: transparent;
border: none;
font-size: 0.78rem;
- color: var(--color-text);
+ color: var(--fs-text-primary);
min-width: 0;
padding: 0;
}
@@ -503,7 +503,7 @@ defineExpose({ reload: loadProjectNotes });
.rail-state {
padding: 1rem 0.65rem;
font-size: 0.78rem;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
}
/* Note list */
@@ -519,16 +519,16 @@ defineExpose({ reload: loadProjectNotes });
display: flex;
flex-direction: column;
padding: 0.4rem 0.6rem;
- border-bottom: 1px solid color-mix(in srgb, var(--color-border) 60%, transparent);
+ border-bottom: 1px solid color-mix(in srgb, var(--fs-border-color) 60%, transparent);
cursor: pointer;
gap: 0.15rem;
border-right: 2px solid transparent;
transition: background 0.12s;
}
-.note-row:hover { background: color-mix(in srgb, var(--color-primary) 5%, var(--color-surface)); }
+.note-row:hover { background: color-mix(in srgb, var(--fs-accent) 5%, var(--fs-surface-hover)); }
.note-row.active {
- background: color-mix(in srgb, var(--color-primary) 8%, var(--color-surface));
- border-right-color: var(--color-primary);
+ background: color-mix(in srgb, var(--fs-accent) 8%, var(--fs-surface-hover));
+ border-right-color: var(--fs-accent);
}
.note-row-main {
@@ -544,12 +544,12 @@ defineExpose({ reload: loadProjectNotes });
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
- color: var(--color-text);
+ color: var(--fs-text-primary);
}
.note-row-age {
font-size: 0.62rem;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
white-space: nowrap;
flex-shrink: 0;
}
@@ -562,8 +562,8 @@ defineExpose({ reload: loadProjectNotes });
.note-tag-pill {
font-size: 0.58rem;
- color: var(--color-primary);
- background: color-mix(in srgb, var(--color-primary) 10%, transparent);
+ color: var(--fs-accent);
+ background: color-mix(in srgb, var(--fs-accent) 10%, transparent);
border-radius: 999px;
padding: 0 0.3rem;
white-space: nowrap;
@@ -572,13 +572,13 @@ defineExpose({ reload: loadProjectNotes });
max-width: 5rem;
}
.note-tag-pill.tag-match {
- background: color-mix(in srgb, var(--color-primary) 22%, transparent);
- outline: 1px solid var(--color-primary);
+ background: color-mix(in srgb, var(--fs-accent) 22%, transparent);
+ outline: 1px solid var(--fs-accent);
}
.note-tag-more {
font-size: 0.58rem;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
white-space: nowrap;
}
@@ -606,8 +606,8 @@ defineExpose({ reload: loadProjectNotes });
margin-left: auto;
}
-.unsaved { font-size: 0.72rem; color: var(--color-text-muted); }
-.saving-txt { font-size: 0.72rem; color: var(--color-primary); }
+.unsaved { font-size: 0.72rem; color: var(--fs-text-tertiary); }
+.saving-txt { font-size: 0.72rem; color: var(--fs-accent); }
/* Moss action-primary per Hybrid */
@@ -618,14 +618,14 @@ defineExpose({ reload: loadProjectNotes });
font-size: 1.4rem;
font-weight: 500;
line-height: 1.25;
- color: var(--color-text);
+ color: var(--fs-text-primary);
padding: 0;
font-family: 'Fraunces', serif;
letter-spacing: -0.01em;
}
.note-title-input:focus { outline: none; }
.note-title-input::placeholder {
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
}
.tag-row {
@@ -645,25 +645,25 @@ defineExpose({ reload: loadProjectNotes });
align-items: center;
gap: 0.3rem;
padding: 0.35rem 0.6rem;
- background: color-mix(in srgb, var(--color-primary) 5%, var(--color-surface));
+ background: color-mix(in srgb, var(--fs-accent) 5%, var(--fs-surface-hover));
flex-shrink: 0;
}
-.tag-suggestions-label { font-size: 0.72rem; color: var(--color-text-muted); flex-shrink: 0; }
+.tag-suggestions-label { font-size: 0.72rem; color: var(--fs-text-tertiary); flex-shrink: 0; }
.btn-tag-suggestion {
background: none;
- border: 1px solid var(--color-border);
+ border: 1px solid var(--fs-border-color);
border-radius: 999px;
padding: 0.15rem 0.55rem;
font-size: 0.75rem;
- color: var(--color-text);
+ color: var(--fs-text-primary);
cursor: pointer;
}
-.btn-tag-suggestion:hover { border-color: var(--color-primary); color: var(--color-primary); }
+.btn-tag-suggestion:hover { border-color: var(--fs-accent); color: var(--fs-accent); }
.btn-tag-suggestion.applied {
- background: color-mix(in srgb, var(--color-primary) 15%, transparent);
- border-color: var(--color-primary);
- color: var(--color-primary);
+ background: color-mix(in srgb, var(--fs-accent) 15%, transparent);
+ border-color: var(--fs-accent);
+ color: var(--fs-accent);
}
@@ -673,12 +673,12 @@ defineExpose({ reload: loadProjectNotes });
flex-wrap: wrap;
gap: 0.25rem;
padding: 0.3rem 0.6rem;
- background: color-mix(in srgb, var(--color-primary) 5%, var(--color-surface));
+ background: color-mix(in srgb, var(--fs-accent) 5%, var(--fs-surface-hover));
flex-shrink: 0;
}
.link-suggest-label {
font-size: 0.7rem;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
flex-shrink: 0;
font-weight: 500;
text-transform: uppercase;
@@ -688,15 +688,15 @@ defineExpose({ reload: loadProjectNotes });
.btn-chip-link {
background: none;
- border: 1px solid var(--color-primary);
+ border: 1px solid var(--fs-accent);
border-radius: 999px;
padding: 0.1rem 0.45rem;
font-size: 0.7rem;
- color: var(--color-primary);
+ color: var(--fs-accent);
cursor: pointer;
font-family: monospace;
white-space: nowrap;
}
-.btn-chip-link:hover { background: color-mix(in srgb, var(--color-primary) 15%, transparent); }
+.btn-chip-link:hover { background: color-mix(in srgb, var(--fs-accent) 15%, transparent); }
diff --git a/frontend/src/components/WorkspaceTaskPanel.vue b/frontend/src/components/WorkspaceTaskPanel.vue
index bc32830..af7142a 100644
--- a/frontend/src/components/WorkspaceTaskPanel.vue
+++ b/frontend/src/components/WorkspaceTaskPanel.vue
@@ -344,8 +344,8 @@ defineExpose({ reload: loadAll });
flex-direction: column;
height: 100%;
overflow: hidden;
- background: var(--color-surface);
- border-right: 1px solid var(--color-border);
+ background: var(--fs-surface-hover);
+ border-right: 1px solid var(--fs-border-color);
}
/* ── List view ── */
@@ -360,17 +360,17 @@ defineExpose({ reload: loadAll });
flex: 0 0 44%;
}
.task-active {
- background: color-mix(in srgb, var(--color-primary) 6%, var(--color-surface)) !important;
+ background: color-mix(in srgb, var(--fs-accent) 6%, var(--fs-surface-hover)) !important;
}
.panel-header {
padding: 0.6rem 0.75rem;
- border-bottom: 1px solid var(--color-border);
+ border-bottom: 1px solid var(--fs-border-color);
flex-shrink: 0;
}
.panel-title {
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
text-transform: uppercase;
letter-spacing: 0.04em;
font-size: 0.75rem;
@@ -381,20 +381,20 @@ defineExpose({ reload: loadAll });
display: flex;
gap: 0.4rem;
padding: 0.45rem 0.6rem;
- border-bottom: 1px solid var(--color-border);
+ border-bottom: 1px solid var(--fs-border-color);
flex-shrink: 0;
}
.task-add-input {
flex: 1;
- background: var(--color-input-bg);
- border: 1px solid var(--color-border);
+ background: var(--fs-surface-page);
+ border: 1px solid var(--fs-border-color);
border-radius: 5px;
padding: 0.28rem 0.5rem;
font-size: 0.83rem;
- color: var(--color-text);
+ color: var(--fs-text-primary);
}
-.task-add-input:focus { outline: none; border-color: var(--color-primary); }
+.task-add-input:focus { outline: none; border-color: var(--fs-accent); }
.btn-add { font-size: 1rem; } /* a '+' glyph, not a label */
@@ -404,7 +404,7 @@ defineExpose({ reload: loadAll });
}
.ms-group {
- border-bottom: 1px solid var(--color-border);
+ border-bottom: 1px solid var(--fs-border-color);
}
.ms-group-header {
@@ -413,18 +413,18 @@ defineExpose({ reload: loadAll });
gap: 0.4rem;
width: 100%;
padding: 0.4rem 0.65rem;
- background: var(--color-surface-raised);
+ background: var(--fs-surface-raised);
border: none;
cursor: pointer;
text-align: left;
font-size: 0.8rem;
- color: var(--color-text);
+ color: var(--fs-text-primary);
}
-.ms-group-header:hover { background: color-mix(in srgb, var(--color-primary) 8%, var(--color-surface)); }
+.ms-group-header:hover { background: color-mix(in srgb, var(--fs-accent) 8%, var(--fs-surface-hover)); }
-.ms-chevron { font-size: 0.6rem; color: var(--color-text-muted); width: 0.8rem; }
+.ms-chevron { font-size: 0.6rem; color: var(--fs-text-tertiary); width: 0.8rem; }
.ms-name { flex: 1; font-weight: 500; font-size: 0.8rem; }
-.ms-count { font-size: 0.72rem; color: var(--color-text-muted); background: var(--color-bg); border-radius: 10px; padding: 0 0.4rem; }
+.ms-count { font-size: 0.72rem; color: var(--fs-text-tertiary); background: var(--fs-surface-page); border-radius: 10px; padding: 0 0.4rem; }
.ms-status {
font-size: 0.68rem;
@@ -432,8 +432,8 @@ defineExpose({ reload: loadAll });
border-radius: 10px;
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) 15%, transparent); color: var(--color-success); }
+.ms-status-active { background: color-mix(in srgb, var(--fs-accent) 15%, transparent); color: var(--fs-accent); }
+.ms-status-completed { background: color-mix(in srgb, var(--fs-success) 15%, transparent); color: var(--fs-success); }
.task-items {
list-style: none;
@@ -447,9 +447,9 @@ defineExpose({ reload: loadAll });
gap: 0.4rem;
padding: 0.35rem 0.65rem 0.35rem 1.4rem;
cursor: pointer;
- border-bottom: 1px solid color-mix(in srgb, var(--color-border) 50%, transparent);
+ border-bottom: 1px solid color-mix(in srgb, var(--fs-border-color) 50%, transparent);
}
-.task-row:hover { background: color-mix(in srgb, var(--color-primary) 5%, var(--color-surface)); }
+.task-row:hover { background: color-mix(in srgb, var(--fs-accent) 5%, var(--fs-surface-hover)); }
.task-row:last-child { border-bottom: none; }
.status-dot {
@@ -457,7 +457,7 @@ defineExpose({ reload: loadAll });
width: 1.35rem;
height: 1.35rem;
border-radius: 50%;
- border: 1.5px solid var(--color-border);
+ border: 1.5px solid var(--fs-border-color);
background: none;
cursor: pointer;
font-size: 0.62rem;
@@ -465,8 +465,8 @@ defineExpose({ reload: loadAll });
align-items: center;
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); color: var(--color-success); }
+.status-dot.status-in_progress { border-color: var(--fs-accent); color: var(--fs-accent); }
+.status-dot.status-done { border-color: var(--fs-success); color: var(--fs-success); }
.task-title {
flex: 1;
@@ -474,20 +474,20 @@ defineExpose({ reload: loadAll });
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
- color: var(--color-text);
+ color: var(--fs-text-primary);
}
-.task-title.done { text-decoration: line-through; color: var(--color-text-muted); }
+.task-title.done { text-decoration: line-through; color: var(--fs-text-tertiary); }
.task-age {
font-size: 0.68rem;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
white-space: nowrap;
flex-shrink: 0;
}
-.empty-group { padding: 0.4rem 1.4rem; font-size: 0.78rem; color: var(--color-text-muted); }
+.empty-group { padding: 0.4rem 1.4rem; font-size: 0.78rem; color: var(--fs-text-tertiary); }
-.state-msg { padding: 1.5rem; text-align: center; font-size: 0.85rem; color: var(--color-text-muted); }
+.state-msg { padding: 1.5rem; text-align: center; font-size: 0.85rem; color: var(--fs-text-tertiary); }
/* ── Detail pane (bottom split) ── */
.task-detail {
@@ -496,8 +496,8 @@ defineExpose({ reload: loadAll });
display: flex;
flex-direction: column;
overflow: hidden;
- background: var(--color-surface);
- border-top: 2px solid var(--color-border);
+ background: var(--fs-surface-hover);
+ border-top: 2px solid var(--fs-border-color);
}
.detail-header {
@@ -505,7 +505,7 @@ defineExpose({ reload: loadAll });
align-items: center;
gap: 0.6rem;
padding: 0.6rem 0.75rem;
- border-bottom: 1px solid var(--color-border);
+ border-bottom: 1px solid var(--fs-border-color);
flex-shrink: 0;
}
@@ -515,21 +515,21 @@ defineExpose({ reload: loadAll });
font-size: 0.75rem;
font-weight: 500;
cursor: pointer;
- border: 1.5px solid var(--color-border);
+ border: 1.5px solid var(--fs-border-color);
background: none;
text-transform: capitalize;
user-select: none;
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); color: var(--color-success); background: color-mix(in srgb, var(--color-success) 10%, transparent); }
+.status-badge.status-in_progress { border-color: var(--fs-accent); color: var(--fs-accent); background: color-mix(in srgb, var(--fs-accent) 10%, transparent); }
+.status-badge.status-done { border-color: var(--fs-success); color: var(--fs-success); background: color-mix(in srgb, var(--fs-success) 10%, transparent); }
.btn-edit-task { margin-left: 0.25rem; }
.btn-edit-task:hover { text-decoration: underline; }
.detail-body {
padding: 0.5rem 0.75rem 0.5rem;
- border-bottom: 1px solid var(--color-border);
+ border-bottom: 1px solid var(--fs-border-color);
flex-shrink: 0;
max-height: 40%;
overflow-y: auto;
@@ -537,17 +537,17 @@ defineExpose({ reload: loadAll });
.body-loading {
font-size: 0.8rem;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
}
.detail-body .prose {
font-size: 0.83rem;
line-height: 1.5;
- color: var(--color-text);
+ color: var(--fs-text-primary);
}
.btn-delete-task { margin-left: 0.25rem; }
-.btn-delete-task:hover { color: var(--color-action-destructive); }
+.btn-delete-task:hover { color: var(--fs-action-destructive); }
.btn-delete-confirm { margin-left: 0.25rem; }
@@ -563,9 +563,9 @@ defineExpose({ reload: loadAll });
font-size: 0.72rem;
padding: 0.15rem 0.5rem;
border-radius: 10px;
- background: var(--color-bg);
- border: 1px solid var(--color-border);
- color: var(--color-text-muted);
+ background: var(--fs-surface-page);
+ border: 1px solid var(--fs-border-color);
+ color: var(--fs-text-tertiary);
text-transform: capitalize;
}
@@ -573,20 +573,20 @@ defineExpose({ reload: loadAll });
font-size: 0.72rem;
padding: 0.15rem 0.4rem;
border-radius: 10px;
- background: var(--color-bg);
- border: 1px solid var(--color-border);
- color: var(--color-text-muted);
+ background: var(--fs-surface-page);
+ border: 1px solid var(--fs-border-color);
+ color: var(--fs-text-tertiary);
cursor: pointer;
max-width: 140px;
}
.milestone-select:disabled { opacity: 0.5; cursor: default; }
-.milestone-select:focus { outline: none; border-color: var(--color-primary); }
+.milestone-select:focus { outline: none; border-color: var(--fs-accent); }
.detail-log {
flex: 1;
overflow-y: auto;
padding: 0 0.6rem 0.6rem;
- border-top: 1px solid var(--color-border);
+ border-top: 1px solid var(--fs-border-color);
}
/* Detail fade transition */
@@ -609,12 +609,12 @@ defineExpose({ reload: loadAll });
/* Due date on task rows */
.task-due {
font-size: 0.65rem;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
white-space: nowrap;
flex-shrink: 0;
}
.task-due.overdue {
- color: var(--color-danger);
+ color: var(--fs-error);
font-weight: 500;
}
diff --git a/frontend/src/components/rules/PlanRulesPanel.vue b/frontend/src/components/rules/PlanRulesPanel.vue
index 0610745..c9b75f5 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 fee2105..817124a 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);
- border-left: 2px solid var(--color-primary);
+ background: var(--fs-surface-hover);
+ border-left: 2px solid var(--fs-accent);
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); }
+.required { color: var(--fs-accent); }
input, textarea {
width: 100%; margin-top: 0.25rem;
- background: var(--color-bg); color: inherit;
- border: 1px solid var(--color-border); border-radius: 6px;
+ background: var(--fs-surface-page); color: inherit;
+ border: 1px solid var(--fs-border-color); 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 b33bd6a..2368213 100644
--- a/frontend/src/components/rules/RuleListPane.vue
+++ b/frontend/src/components/rules/RuleListPane.vue
@@ -22,18 +22,18 @@ const emit = defineEmits<{
diff --git a/frontend/src/views/DesignSystemsView.vue b/frontend/src/views/DesignSystemsView.vue
index 4a3d399..752f51b 100644
--- a/frontend/src/views/DesignSystemsView.vue
+++ b/frontend/src/views/DesignSystemsView.vue
@@ -1115,7 +1115,7 @@ function isSelfContainedColour(value: string): boolean {
}
.lede {
- color: var(--color-text-secondary);
+ color: var(--fs-text-secondary);
max-width: 70ch;
line-height: 1.6;
margin: 0 0 1.5rem;
@@ -1137,9 +1137,9 @@ function isSelfContainedColour(value: string): boolean {
/* Sidebar ---------------------------------------------------------------- */
.ds-sidebar {
- background: var(--color-bg-card);
- border: 1px solid var(--color-border);
- border-radius: var(--radius-md);
+ background: var(--fs-surface-raised);
+ border: 1px solid var(--fs-border-color);
+ border-radius: var(--fs-radius-lg);
padding: 1rem;
}
@@ -1156,7 +1156,7 @@ function isSelfContainedColour(value: string): boolean {
font-size: 0.75rem;
text-transform: uppercase;
letter-spacing: 0.08em;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
}
.system-list {
@@ -1173,22 +1173,22 @@ function isSelfContainedColour(value: string): boolean {
text-align: left;
background: none;
border: 1px solid transparent;
- border-radius: var(--radius-sm);
+ border-radius: var(--fs-radius-sm);
padding: 0.5rem 0.6rem;
cursor: pointer;
- color: var(--color-text);
+ color: var(--fs-text-primary);
display: flex;
flex-direction: column;
gap: 0.15rem;
}
.system-btn:hover {
- background: var(--color-bg-secondary);
+ background: var(--fs-surface-raised);
}
.system-btn.active {
- border-color: var(--color-primary);
- background: var(--color-bg-secondary);
+ border-color: var(--fs-accent);
+ background: var(--fs-surface-raised);
}
@@ -1198,7 +1198,7 @@ function isSelfContainedColour(value: string): boolean {
.system-kind {
font-size: 0.75rem;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
}
/* Sections --------------------------------------------------------------- */
@@ -1211,9 +1211,9 @@ function isSelfContainedColour(value: string): boolean {
}
.ds-section {
- background: var(--color-bg-card);
- border: 1px solid var(--color-border);
- border-radius: var(--radius-md);
+ background: var(--fs-surface-raised);
+ border: 1px solid var(--fs-border-color);
+ border-radius: var(--fs-radius-lg);
padding: 1.25rem;
}
@@ -1232,7 +1232,7 @@ function isSelfContainedColour(value: string): boolean {
.section-note,
.muted {
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
font-size: 0.85rem;
margin: 0 0 1rem;
}
@@ -1247,17 +1247,17 @@ function isSelfContainedColour(value: string): boolean {
}
.chain-link {
- color: var(--color-text-secondary);
+ color: var(--fs-text-secondary);
}
.chain-link.self {
- color: var(--color-text);
+ color: var(--fs-text-primary);
font-weight: 500;
}
.chain-arrow,
.chain-note {
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
}
/* Fields ----------------------------------------------------------------- */
@@ -1282,24 +1282,24 @@ function isSelfContainedColour(value: string): boolean {
font-size: 0.75rem;
text-transform: uppercase;
letter-spacing: 0.08em;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
margin-bottom: 0.3rem;
}
.field-hint {
margin: 0.3rem 0 0;
font-size: 0.8rem;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
line-height: 1.5;
}
.input {
width: 100%;
padding: 0.45rem 0.6rem;
- background: var(--color-bg);
- border: 1px solid var(--color-border);
- border-radius: var(--radius-sm);
- color: var(--color-text);
+ background: var(--fs-surface-page);
+ border: 1px solid var(--fs-border-color);
+ border-radius: var(--fs-radius-sm);
+ color: var(--fs-text-primary);
font: inherit;
}
@@ -1328,15 +1328,15 @@ textarea.input {
.confirm-copy {
font-size: 0.85rem;
- color: var(--color-text-secondary);
+ color: var(--fs-text-secondary);
max-width: 40ch;
}
/* Tokens ----------------------------------------------------------------- */
.token-form {
- border: 1px solid var(--color-border);
- border-radius: var(--radius-sm);
+ border: 1px solid var(--fs-border-color);
+ border-radius: var(--fs-radius-sm);
padding: 1rem;
margin-bottom: 1rem;
}
@@ -1371,7 +1371,7 @@ textarea.input {
align-items: center;
gap: 0.6rem;
padding: 0.5rem 0;
- border-bottom: 1px solid var(--color-border);
+ border-bottom: 1px solid var(--fs-border-color);
}
.token-name {
@@ -1386,7 +1386,7 @@ textarea.input {
}
.token-meta {
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
font-size: 0.8rem;
flex: 1;
min-width: 0;
@@ -1405,18 +1405,18 @@ textarea.input {
.finding-list li {
padding: 0.6rem 0;
- border-bottom: 1px solid var(--color-border);
+ border-bottom: 1px solid var(--fs-border-color);
}
.finding-title {
font-weight: 500;
- color: var(--color-text);
+ color: var(--fs-text-primary);
}
.finding-line {
margin: 0.3rem 0 0;
font-size: 0.85rem;
- color: var(--color-text-secondary);
+ color: var(--fs-text-secondary);
display: flex;
flex-wrap: wrap;
align-items: center;
@@ -1428,24 +1428,24 @@ textarea.input {
text-transform: uppercase;
letter-spacing: 0.06em;
padding: 0.1rem 0.45rem;
- border-radius: var(--radius-sm);
+ border-radius: var(--fs-radius-sm);
flex: none;
}
.spec-status.violated {
- background: var(--color-priority-high-bg);
- color: var(--color-priority-high);
+ background: var(--fs-priority-high-bg);
+ color: var(--fs-priority-high);
}
.spec-status.missing {
- background: var(--color-priority-medium-bg);
- color: var(--color-priority-medium);
+ background: var(--fs-priority-medium-bg);
+ color: var(--fs-priority-medium);
}
.sheet {
- background: var(--color-bg);
- border: 1px solid var(--color-border);
- border-radius: var(--radius-sm);
+ background: var(--fs-surface-page);
+ border: 1px solid var(--fs-border-color);
+ border-radius: var(--fs-radius-sm);
padding: 0.75rem 1rem;
margin-top: 0.75rem;
overflow-x: auto;
@@ -1472,7 +1472,7 @@ textarea.input {
.supersedes {
font-size: 0.75rem;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
font-style: italic;
}
@@ -1484,7 +1484,7 @@ textarea.input {
}
.mode-name {
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
text-transform: uppercase;
font-size: 0.7rem;
letter-spacing: 0.06em;
@@ -1495,7 +1495,7 @@ textarea.input {
width: 0.9rem;
height: 0.9rem;
border-radius: 3px;
- border: 1px solid var(--color-border);
+ border: 1px solid var(--fs-border-color);
flex: none;
}
@@ -1510,12 +1510,12 @@ textarea.input {
font-size: 0.7rem;
text-transform: uppercase;
letter-spacing: 0.08em;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
}
.resolved-list li {
padding: 0.5rem 0;
- border-bottom: 1px solid var(--color-border);
+ border-bottom: 1px solid var(--fs-border-color);
}
.resolved-head {
@@ -1551,33 +1551,33 @@ textarea.input {
text-transform: uppercase;
letter-spacing: 0.06em;
padding: 0.1rem 0.45rem;
- border-radius: var(--radius-sm);
- background: var(--color-bg-secondary);
- color: var(--color-text-muted);
+ border-radius: var(--fs-radius-sm);
+ background: var(--fs-surface-raised);
+ color: var(--fs-text-tertiary);
}
.origin-badge.own {
- background: var(--color-primary-tint);
- color: var(--color-primary);
+ background: var(--fs-accent-soft);
+ color: var(--fs-accent);
}
/* Notices ---------------------------------------------------------------- */
.notice {
- background: var(--color-bg-card);
- border: 1px solid var(--color-border);
- border-radius: var(--radius-md);
+ background: var(--fs-surface-raised);
+ border: 1px solid var(--fs-border-color);
+ border-radius: var(--fs-radius-lg);
padding: 1.25rem;
max-width: 60ch;
}
.notice-warn {
- border-left: 3px solid var(--color-warning);
+ border-left: 3px solid var(--fs-warning);
}
.notice p {
margin: 0.5rem 0 1rem;
- color: var(--color-text-secondary);
+ color: var(--fs-text-secondary);
line-height: 1.6;
}
diff --git a/frontend/src/views/ForgotPasswordView.vue b/frontend/src/views/ForgotPasswordView.vue
index 8afdca5..198a0c8 100644
--- a/frontend/src/views/ForgotPasswordView.vue
+++ b/frontend/src/views/ForgotPasswordView.vue
@@ -78,9 +78,9 @@ async function handleSubmit() {
.auth-card {
width: 100%;
max-width: 400px;
- background: var(--color-bg-card);
- border: 1px solid var(--color-border);
- border-radius: var(--radius-md);
+ background: var(--fs-surface-raised);
+ border: 1px solid var(--fs-border-color);
+ border-radius: var(--fs-radius-lg);
padding: 2rem;
}
.auth-brand {
@@ -97,7 +97,7 @@ async function handleSubmit() {
.auth-hint {
text-align: center;
font-size: 0.9rem;
- color: var(--color-text-secondary);
+ color: var(--fs-text-secondary);
margin-bottom: 1rem;
}
.field {
@@ -112,25 +112,25 @@ async function handleSubmit() {
.input {
width: 100%;
padding: 0.5rem 0.75rem;
- border: 1px solid var(--color-border);
- border-radius: var(--radius-sm);
+ border: 1px solid var(--fs-border-color);
+ border-radius: var(--fs-radius-sm);
font-size: 0.95rem;
- background: var(--color-bg);
- color: var(--color-text);
+ background: var(--fs-surface-page);
+ color: var(--fs-text-primary);
box-sizing: border-box;
}
.input:focus {
outline: none;
- border-color: var(--color-primary);
+ border-color: var(--fs-accent);
}
.error-msg {
- color: var(--color-danger);
+ color: var(--fs-error);
font-size: 0.9rem;
margin: 0 0 0.75rem;
}
.success-msg {
text-align: center;
- color: var(--color-text-secondary);
+ color: var(--fs-text-secondary);
font-size: 0.95rem;
padding: 0.5rem 0;
}
@@ -140,10 +140,10 @@ async function handleSubmit() {
.auth-footer {
text-align: center;
font-size: 0.9rem;
- color: var(--color-text-secondary);
+ color: var(--fs-text-secondary);
margin: 1rem 0 0;
}
.auth-footer a {
- color: var(--color-primary);
+ color: var(--fs-accent);
}
diff --git a/frontend/src/views/GraphView.vue b/frontend/src/views/GraphView.vue
index 273fa49..6642522 100644
--- a/frontend/src/views/GraphView.vue
+++ b/frontend/src/views/GraphView.vue
@@ -208,7 +208,7 @@ function initGraph() {
.attr("orient", "auto")
.append("path")
.attr("d", "M0,-4L8,0L0,4")
- .attr("fill", "var(--color-primary)")
+ .attr("fill", "var(--fs-accent)")
.attr("opacity", "0.6");
// Zoom layer
@@ -237,7 +237,7 @@ function initGraph() {
.append("line")
.attr("class", "graph-edge")
.attr("stroke", (d: any) =>
- d.type === "wikilink" ? "var(--color-primary)" : "var(--color-text-muted)"
+ d.type === "wikilink" ? "var(--fs-accent)" : "var(--fs-text-tertiary)"
)
.attr("stroke-opacity", (d: any) => (d.type === "wikilink" ? 0.5 : 0.4))
.attr("stroke-dasharray", null)
@@ -295,11 +295,11 @@ function initGraph() {
.append("circle")
.attr("r", (d: GraphNode) => d.radius ?? 8)
.attr("fill", (d: GraphNode) => {
- if (d.type === "tag") return "color-mix(in srgb, var(--color-primary) 20%, transparent)";
- return d.project_color ?? "var(--color-bg-secondary)";
+ if (d.type === "tag") return "color-mix(in srgb, var(--fs-accent) 20%, transparent)";
+ return d.project_color ?? "var(--fs-surface-raised)";
})
.attr("stroke", (d: GraphNode) =>
- d.type === "tag" ? "var(--color-primary)" : "var(--color-border)"
+ d.type === "tag" ? "var(--fs-accent)" : "var(--fs-border-color)"
)
.attr("stroke-width", (d: GraphNode) => (d.type === "tag" ? 1.5 : 1.5))
.attr("stroke-dasharray", (d: GraphNode) => (d.type === "task" ? "3" : null))
@@ -317,7 +317,7 @@ function initGraph() {
.attr("dy", (d: GraphNode) => (d.radius ?? 8) + 12)
.attr("font-size", "10px")
.attr("fill", (d: GraphNode) =>
- d.type === "tag" ? "var(--color-primary)" : "var(--color-text-secondary)"
+ d.type === "tag" ? "var(--fs-accent)" : "var(--fs-text-secondary)"
)
.attr("pointer-events", "none");
@@ -600,7 +600,7 @@ onUnmounted(() => {
.graph-page {
display: flex;
flex-direction: column;
- height: calc(100vh - var(--header-height));
+ height: calc(100vh - var(--fs-layout-header));
overflow: hidden;
}
@@ -609,17 +609,17 @@ onUnmounted(() => {
align-items: center;
gap: 0.75rem;
padding: 0.6rem 1rem;
- background: var(--color-bg-secondary);
- border-bottom: 1px solid var(--color-border);
+ background: var(--fs-surface-raised);
+ border-bottom: 1px solid var(--fs-border-color);
flex-shrink: 0;
flex-wrap: wrap;
}
.graph-select {
- background: var(--color-bg-card);
- border: 1px solid var(--color-border);
- border-radius: var(--radius-sm);
- color: var(--color-text);
+ background: var(--fs-surface-raised);
+ border: 1px solid var(--fs-border-color);
+ border-radius: var(--fs-radius-sm);
+ color: var(--fs-text-primary);
font-size: 0.875rem;
padding: 0.3rem 0.6rem;
cursor: pointer;
@@ -631,27 +631,27 @@ onUnmounted(() => {
align-items: center;
gap: 0.35rem;
font-size: 0.875rem;
- color: var(--color-text-secondary);
+ color: var(--fs-text-secondary);
cursor: pointer;
user-select: none;
}
.graph-toggle input {
cursor: pointer;
- accent-color: var(--color-primary);
+ accent-color: var(--fs-accent);
}
.graph-stats {
margin-left: auto;
font-size: 0.8rem;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
}
.graph-physics-btn {
- background: var(--color-bg-card);
- border: 1px solid var(--color-border);
- border-radius: var(--radius-sm);
- color: var(--color-text-secondary);
+ background: var(--fs-surface-raised);
+ border: 1px solid var(--fs-border-color);
+ border-radius: var(--fs-radius-sm);
+ color: var(--fs-text-secondary);
font-size: 0.875rem;
font-family: inherit;
padding: 0.3rem 0.7rem;
@@ -659,12 +659,12 @@ onUnmounted(() => {
transition: border-color 0.15s, color 0.15s;
}
.graph-physics-btn:hover {
- border-color: var(--color-primary);
- color: var(--color-text);
+ border-color: var(--fs-accent);
+ color: var(--fs-text-primary);
}
.graph-physics-btn.active {
- border-color: var(--color-primary);
- color: var(--color-primary);
+ border-color: var(--fs-accent);
+ color: var(--fs-accent);
}
.graph-physics-panel {
@@ -672,8 +672,8 @@ onUnmounted(() => {
flex-wrap: wrap;
gap: 0.5rem 1.5rem;
padding: 0.6rem 1rem;
- background: var(--color-bg-secondary);
- border-bottom: 1px solid var(--color-border);
+ background: var(--fs-surface-raised);
+ border-bottom: 1px solid var(--fs-border-color);
flex-shrink: 0;
}
@@ -688,20 +688,20 @@ onUnmounted(() => {
.knob-label {
font-size: 0.75rem;
- color: var(--color-text-secondary);
+ color: var(--fs-text-secondary);
display: flex;
justify-content: space-between;
}
.knob-label em {
font-style: normal;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
font-variant-numeric: tabular-nums;
}
.physics-knob input[type="range"] {
width: 100%;
- accent-color: var(--color-primary);
+ accent-color: var(--fs-accent);
cursor: pointer;
}
@@ -709,7 +709,7 @@ onUnmounted(() => {
flex: 1;
position: relative;
overflow: hidden;
- background: var(--color-bg);
+ background: var(--fs-surface-page);
}
.graph-svg {
@@ -728,15 +728,15 @@ onUnmounted(() => {
}
.graph-empty p {
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
font-size: 0.95rem;
}
.spinner {
width: 28px;
height: 28px;
- border: 3px solid var(--color-border);
- border-top-color: var(--color-primary);
+ border: 3px solid var(--fs-border-color);
+ border-top-color: var(--fs-accent);
border-radius: 50%;
animation: spin 0.7s linear infinite;
}
@@ -747,9 +747,9 @@ onUnmounted(() => {
.graph-tooltip {
position: absolute;
- background: var(--color-bg-card);
- border: 1px solid var(--color-border);
- border-radius: var(--radius-md);
+ background: var(--fs-surface-raised);
+ border: 1px solid var(--fs-border-color);
+ border-radius: var(--fs-radius-lg);
box-shadow: 0 4px 16px var(--color-shadow);
padding: 0.5rem 0.75rem;
pointer-events: none;
@@ -760,7 +760,7 @@ onUnmounted(() => {
.tooltip-title {
font-size: 0.875rem;
font-weight: 500;
- color: var(--color-text);
+ color: var(--fs-text-primary);
margin-bottom: 0.25rem;
}
@@ -773,15 +773,15 @@ onUnmounted(() => {
.tag-chip {
font-size: 0.7rem;
- background: color-mix(in srgb, var(--color-primary) 15%, transparent);
- color: var(--color-primary);
+ background: color-mix(in srgb, var(--fs-accent) 15%, transparent);
+ color: var(--fs-accent);
border-radius: 999px;
padding: 0.1rem 0.4rem;
}
.tooltip-meta {
font-size: 0.75rem;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
text-transform: capitalize;
}
@@ -792,8 +792,8 @@ onUnmounted(() => {
right: 0;
bottom: 0;
width: 340px;
- background: var(--color-bg-card);
- border-left: 1px solid var(--color-border);
+ background: var(--fs-surface-raised);
+ border-left: 1px solid var(--fs-border-color);
box-shadow: -4px 0 16px rgba(0, 0, 0, 0.1);
display: flex;
flex-direction: column;
@@ -815,7 +815,7 @@ onUnmounted(() => {
align-items: center;
gap: 0.5rem;
padding: 0.6rem 0.75rem;
- border-bottom: 1px solid var(--color-border);
+ border-bottom: 1px solid var(--fs-border-color);
flex-shrink: 0;
}
@@ -826,10 +826,10 @@ onUnmounted(() => {
letter-spacing: 0.05em;
padding: 0.15rem 0.45rem;
border-radius: 10px;
- border: 1px solid var(--color-border);
- color: var(--color-text-muted);
+ border: 1px solid var(--fs-border-color);
+ color: var(--fs-text-tertiary);
}
-.peek-type-task { border-color: var(--color-primary); color: var(--color-primary); }
+.peek-type-task { border-color: var(--fs-accent); color: var(--fs-accent); }
.peek-actions {
display: flex;
@@ -840,7 +840,7 @@ onUnmounted(() => {
.peek-link {
font-size: 0.78rem;
- color: var(--color-primary);
+ color: var(--fs-accent);
text-decoration: none;
}
.peek-link:hover { text-decoration: underline; }
@@ -848,20 +848,20 @@ onUnmounted(() => {
.peek-close {
background: none;
border: none;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
font-size: 0.8rem;
cursor: pointer;
padding: 0.1rem 0.25rem;
border-radius: 3px;
}
-.peek-close:hover { color: var(--color-text); }
+.peek-close:hover { color: var(--fs-text-primary); }
.peek-title {
margin: 0;
padding: 0.75rem 0.75rem 0.4rem;
font-size: 1rem;
font-weight: 500;
- color: var(--color-text);
+ color: var(--fs-text-primary);
flex-shrink: 0;
}
@@ -877,7 +877,7 @@ onUnmounted(() => {
flex: 1;
overflow-y: auto;
padding: 0 0.75rem 0.5rem;
- border-bottom: 1px solid var(--color-border);
+ border-bottom: 1px solid var(--fs-border-color);
}
.peek-prose {
@@ -887,7 +887,7 @@ onUnmounted(() => {
.peek-loading,
.peek-empty {
font-size: 0.82rem;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
padding-top: 0.5rem;
}
@@ -901,7 +901,7 @@ onUnmounted(() => {
font-weight: 500;
text-transform: uppercase;
letter-spacing: 0.05em;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
margin-bottom: 0.4rem;
}
@@ -921,14 +921,14 @@ onUnmounted(() => {
align-items: center;
gap: 0.4rem;
font-size: 0.82rem;
- color: var(--color-text);
+ color: var(--fs-text-primary);
cursor: pointer;
padding: 0.25rem 0.4rem;
border-radius: 4px;
}
.peek-linked-item:hover {
- background: color-mix(in srgb, var(--color-primary) 8%, var(--color-bg-card));
- color: var(--color-primary);
+ background: color-mix(in srgb, var(--fs-accent) 8%, var(--fs-surface-raised));
+ color: var(--fs-accent);
}
.peek-linked-type {
@@ -937,12 +937,12 @@ onUnmounted(() => {
width: 1.1rem;
height: 1.1rem;
border-radius: 50%;
- background: var(--color-bg);
- border: 1px solid var(--color-border);
+ background: var(--fs-surface-page);
+ border: 1px solid var(--fs-border-color);
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
}
diff --git a/frontend/src/views/KnowledgeView.vue b/frontend/src/views/KnowledgeView.vue
index c1c80cc..b954d75 100644
--- a/frontend/src/views/KnowledgeView.vue
+++ b/frontend/src/views/KnowledgeView.vue
@@ -579,7 +579,7 @@ onUnmounted(() => {
.knowledge-root {
display: flex;
flex-direction: column;
- height: calc(100vh - var(--header-height));
+ height: calc(100vh - var(--fs-layout-header));
overflow: hidden;
}
@@ -590,8 +590,8 @@ onUnmounted(() => {
justify-content: space-between;
gap: 12px;
padding: 8px 20px;
- background: var(--color-bg-secondary);
- border-bottom: 1px solid var(--color-border);
+ background: var(--fs-surface-raised);
+ border-bottom: 1px solid var(--fs-border-color);
flex-shrink: 0;
font-size: 0.82rem;
flex-wrap: wrap;
@@ -607,7 +607,7 @@ onUnmounted(() => {
font-size: 0.78rem;
}
.today-link {
- color: var(--color-primary);
+ color: var(--fs-accent);
text-decoration: none;
font-weight: 500;
opacity: 0.85;
@@ -625,19 +625,19 @@ onUnmounted(() => {
/* ── Filter panel ────────────────────────────────────────── */
.filter-panel {
- width: var(--sidebar-width);
+ width: var(--fs-layout-sidebar);
flex-shrink: 0;
padding: 16px 12px;
- border-right: 1px solid var(--color-border);
+ border-right: 1px solid var(--fs-border-color);
overflow-y: auto;
- background: var(--color-bg-secondary);
+ background: var(--fs-surface-raised);
}
.filter-section { margin-bottom: 20px; }
.filter-section + .filter-section::before {
content: '· · ·';
display: block;
text-align: center;
- color: color-mix(in srgb, var(--color-primary) 30%, transparent);
+ color: color-mix(in srgb, var(--fs-accent) 30%, transparent);
font-size: 0.9rem;
letter-spacing: 0.4em;
padding: 4px 0 12px;
@@ -645,7 +645,7 @@ onUnmounted(() => {
.filter-label {
font-family: 'Fraunces', Georgia, serif;
font-size: 0.95rem;
- color: var(--color-primary);
+ color: var(--fs-accent);
margin-bottom: 8px;
padding: 0 4px;
}
@@ -662,14 +662,14 @@ onUnmounted(() => {
padding: 8px 12px;
border-radius: 10px;
border: none;
- background: var(--gradient-cta);
+ background: var(--fs-gradient-cta);
color: var(--fs-text-on-action);
cursor: pointer;
font-size: 0.85rem;
font-weight: 500;
transition: box-shadow 0.15s;
}
-.btn-new-note:hover { box-shadow: var(--glow-cta-hover); }
+.btn-new-note:hover { box-shadow: var(--fs-glow-cta-hover); }
.btn-new-icon {
font-size: 1.1rem;
line-height: 1;
@@ -680,8 +680,8 @@ onUnmounted(() => {
top: calc(100% + 6px);
left: 0;
right: 0;
- background: var(--color-bg-card);
- border: 1px solid var(--color-border);
+ background: var(--fs-surface-raised);
+ border: 1px solid var(--fs-border-color);
border-radius: 10px;
overflow: hidden;
z-index: 50;
@@ -696,15 +696,15 @@ onUnmounted(() => {
padding: 9px 14px;
background: none;
border: none;
- color: var(--color-text);
+ color: var(--fs-text-primary);
cursor: pointer;
font-size: 0.84rem;
text-align: left;
transition: background 0.12s, color 0.12s;
}
.new-note-menu button:hover {
- background: var(--color-primary-tint);
- color: var(--color-primary);
+ background: var(--fs-accent-soft);
+ color: var(--fs-accent);
}
.new-note-menu button svg {
flex-shrink: 0;
@@ -712,7 +712,7 @@ onUnmounted(() => {
}
.new-note-menu button:hover svg {
opacity: 1;
- stroke: var(--color-primary);
+ stroke: var(--fs-accent);
}
.filter-btn {
@@ -725,7 +725,7 @@ onUnmounted(() => {
border-radius: 7px;
border: none;
background: transparent;
- color: var(--color-text);
+ color: var(--fs-text-primary);
cursor: pointer;
font-size: 0.85rem;
margin-bottom: 2px;
@@ -734,8 +734,8 @@ onUnmounted(() => {
}
.filter-btn:hover { background: rgba(255,255,255,0.05); opacity: 1; }
.filter-btn.active {
- background: var(--color-primary-wash);
- color: var(--color-primary);
+ background: var(--fs-accent-wash);
+ color: var(--fs-accent);
opacity: 1;
}
.filter-btn-label { flex: 1; }
@@ -744,15 +744,15 @@ onUnmounted(() => {
padding: 1px 6px;
border-radius: 10px;
background: rgba(255,255,255,0.07);
- color: var(--color-muted);
+ color: var(--fs-text-tertiary);
font-weight: 500;
min-width: 20px;
text-align: center;
flex-shrink: 0;
}
.filter-btn.active .filter-count {
- background: color-mix(in srgb, var(--color-primary) 20%, transparent);
- color: var(--color-primary);
+ background: color-mix(in srgb, var(--fs-accent) 20%, transparent);
+ color: var(--fs-accent);
}
.filter-tag { font-size: 0.78rem; }
@@ -772,7 +772,7 @@ onUnmounted(() => {
gap: 10px;
padding: 12px 20px;
flex-shrink: 0;
- border-bottom: 1px solid var(--color-border);
+ border-bottom: 1px solid var(--fs-border-color);
}
.search-wrap {
flex: 1;
@@ -783,27 +783,27 @@ onUnmounted(() => {
left: 10px;
top: 50%;
transform: translateY(-50%);
- color: var(--color-muted);
+ color: var(--fs-text-tertiary);
pointer-events: none;
}
.search-input {
width: 100%;
padding: 7px 12px 7px 32px;
border-radius: 8px;
- border: 1px solid var(--color-border);
- background: var(--color-bg-tertiary);
- color: var(--color-text);
+ border: 1px solid var(--fs-border-color);
+ background: var(--fs-surface-hover);
+ color: var(--fs-text-primary);
font-size: 0.88rem;
outline: none;
transition: border-color 0.15s;
}
-.search-input:focus { border-color: var(--color-primary); }
+.search-input:focus { border-color: var(--fs-accent); }
.sort-select {
padding: 7px 10px;
border-radius: 8px;
- border: 1px solid var(--color-border);
- background: var(--color-bg-tertiary);
- color: var(--color-text);
+ border: 1px solid var(--fs-border-color);
+ background: var(--fs-surface-hover);
+ color: var(--fs-text-primary);
font-size: 0.85rem;
cursor: pointer;
outline: none;
@@ -824,9 +824,9 @@ onUnmounted(() => {
.k-card {
position: relative;
- background: var(--color-surface);
- border: 1px solid var(--color-border);
- border-radius: var(--radius-lg);
+ background: var(--fs-surface-hover);
+ border: 1px solid var(--fs-border-color);
+ border-radius: var(--fs-radius-xl);
padding: 14px;
cursor: pointer;
transition: border-color 0.15s, transform 0.12s, box-shadow 0.15s;
@@ -838,12 +838,12 @@ onUnmounted(() => {
}
.k-card:hover {
transform: translateY(-2px);
- box-shadow: 0 8px 28px color-mix(in srgb, var(--color-primary) 25%, transparent), 0 2px 8px rgba(0, 0, 0, 0.3);
- border-color: color-mix(in srgb, var(--color-primary) 35%, transparent);
+ box-shadow: 0 8px 28px color-mix(in srgb, var(--fs-accent) 25%, transparent), 0 2px 8px rgba(0, 0, 0, 0.3);
+ border-color: color-mix(in srgb, var(--fs-accent) 35%, transparent);
}
/* Type-specific card DNA */
-.k-card--note { border-color: color-mix(in srgb, var(--color-primary) 20%, transparent); }
+.k-card--note { border-color: color-mix(in srgb, var(--fs-accent) 20%, transparent); }
.k-card--task { border-color: rgba(212, 160, 23, 0.18); }
/* Top gradient bars */
@@ -858,7 +858,7 @@ onUnmounted(() => {
}
.k-card--note::before {
right: 0;
- background: linear-gradient(90deg, var(--color-primary), #7A6DA8);
+ background: linear-gradient(90deg, var(--fs-accent), #7A6DA8);
}
.k-card--task::before {
right: 0;
@@ -877,7 +877,7 @@ onUnmounted(() => {
text-transform: uppercase;
letter-spacing: 0.04em;
}
-.badge--note { background: color-mix(in srgb, var(--color-primary) 15%, transparent); color: #7A6DA8; }
+.badge--note { background: color-mix(in srgb, var(--fs-accent) 15%, transparent); color: #7A6DA8; }
.badge--task { background: rgba(212,160,23,0.15); color: #fbbf24; }
.badge--plan { background: rgba(99,102,241,0.18); color: #818cf8; }
@@ -894,7 +894,7 @@ onUnmounted(() => {
}
.k-card-snippet {
font-size: 0.8rem;
- color: var(--color-muted);
+ color: var(--fs-text-tertiary);
display: -webkit-box;
-webkit-line-clamp: 4;
-webkit-box-orient: vertical;
@@ -914,9 +914,9 @@ onUnmounted(() => {
padding: 1px 6px;
border-radius: 8px;
background: rgba(255,255,255,0.05);
- color: var(--color-muted);
+ color: var(--fs-text-tertiary);
}
-.k-card-date { font-size: 0.72rem; color: var(--color-text-secondary); white-space: nowrap; opacity: 0.7; }
+.k-card-date { font-size: 0.72rem; color: var(--fs-text-secondary); white-space: nowrap; opacity: 0.7; }
/* Only rendered for a record another user owns, so an unmarked card is
unambiguously the viewer's own. */
.shared-tag {
@@ -924,8 +924,8 @@ onUnmounted(() => {
padding: 0.08rem 0.35rem;
border-radius: 4px;
white-space: nowrap;
- background: color-mix(in srgb, var(--color-text-secondary) 15%, transparent);
- color: var(--color-text-secondary);
+ background: color-mix(in srgb, var(--fs-text-secondary) 15%, transparent);
+ color: var(--fs-text-secondary);
}
/* ── Task card ──────────────────────────────────────────── */
@@ -945,10 +945,10 @@ onUnmounted(() => {
border-radius: 8px;
font-weight: 500;
}
-.status--todo { background: var(--color-status-todo-bg); color: var(--color-status-todo); }
-.status--in_progress { background: var(--color-status-in-progress-bg); color: var(--color-status-in-progress); }
-.status--done { background: var(--color-status-done-bg); color: var(--color-status-done); }
-.status--cancelled { background: var(--color-status-todo-bg); color: var(--color-status-todo); text-decoration: line-through; }
+.status--todo { background: var(--fs-status-todo-bg); color: var(--fs-status-todo); }
+.status--in_progress { background: var(--fs-status-in-progress-bg); color: var(--fs-status-in-progress); }
+.status--done { background: var(--fs-status-done-bg); color: var(--fs-status-done); }
+.status--cancelled { background: var(--fs-status-todo-bg); color: var(--fs-status-todo); text-decoration: line-through; }
.priority-badge {
font-size: 0.7rem;
@@ -956,16 +956,16 @@ onUnmounted(() => {
border-radius: 8px;
font-weight: 500;
}
-.priority--low { background: var(--color-priority-low-bg); color: var(--color-priority-low); }
-.priority--normal { background: var(--color-priority-medium-bg); color: var(--color-priority-medium); }
-.priority--high { background: var(--color-priority-high-bg); color: var(--color-priority-high); }
+.priority--low { background: var(--fs-priority-low-bg); color: var(--fs-priority-low); }
+.priority--normal { background: var(--fs-priority-medium-bg); color: var(--fs-priority-medium); }
+.priority--high { background: var(--fs-priority-high-bg); color: var(--fs-priority-high); }
.task-due {
font-size: 0.78rem;
- color: var(--color-text-secondary);
+ color: var(--fs-text-secondary);
}
.task-overdue {
- color: var(--color-overdue);
+ color: var(--fs-overdue);
font-weight: 500;
}
@@ -977,7 +977,7 @@ onUnmounted(() => {
align-items: center;
justify-content: center;
padding: 60px 20px;
- color: var(--color-muted);
+ color: var(--fs-text-tertiary);
text-align: center;
gap: 6px;
}
@@ -985,7 +985,7 @@ onUnmounted(() => {
.empty-narrator {
font-family: 'Fraunces', Georgia, serif;
font-size: 1rem;
- color: var(--color-text-secondary);
+ color: var(--fs-text-secondary);
opacity: 0.85;
}
@@ -999,17 +999,17 @@ onUnmounted(() => {
}
.sentinel-loading {
font-size: 0.8rem;
- color: var(--color-muted);
+ color: var(--fs-text-tertiary);
}
/* ── Graph panel ─────────────────────────────────────────── */
.graph-panel {
width: 500px;
flex-shrink: 0;
- border-left: 1px solid var(--color-border);
+ border-left: 1px solid var(--fs-border-color);
display: flex;
flex-direction: column;
- background: var(--color-bg-secondary);
+ background: var(--fs-surface-raised);
transition: width 0.2s ease;
}
.graph-panel.expanded {
@@ -1022,7 +1022,7 @@ onUnmounted(() => {
padding: 10px 14px;
font-size: 0.85rem;
font-weight: 500;
- border-bottom: 1px solid var(--color-border);
+ border-bottom: 1px solid var(--fs-border-color);
flex-shrink: 0;
}
/* RESTORED (#2444). The panel is a flex COLUMN and its header is
@@ -1050,15 +1050,15 @@ onUnmounted(() => {
.dup-panel {
margin-bottom: 1.25rem;
padding: 0.85rem 1rem;
- border: 1px solid var(--color-border);
+ border: 1px solid var(--fs-border-color);
border-radius: 8px;
- background: var(--color-surface-alt);
+ background: var(--fs-surface-hover);
}
.dup-empty,
.dup-head {
margin: 0 0 0.5rem;
font-size: 0.85rem;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
}
.dup-empty { margin-bottom: 0; }
.dup-group {
@@ -1067,7 +1067,7 @@ onUnmounted(() => {
gap: 0.75rem;
flex-wrap: wrap;
padding: 0.5rem 0;
- border-top: 1px solid var(--color-border);
+ border-top: 1px solid var(--fs-border-color);
}
.dup-members {
display: flex;
@@ -1080,23 +1080,23 @@ onUnmounted(() => {
font-size: 0.8rem;
padding: 0.1rem 0.45rem;
border-radius: 4px;
- background: color-mix(in srgb, var(--color-text-muted) 12%, transparent);
- color: var(--color-text);
+ background: color-mix(in srgb, var(--fs-text-tertiary) 12%, transparent);
+ color: var(--fs-text-primary);
text-decoration: none;
overflow-wrap: anywhere;
}
-.dup-member:hover { background: var(--color-hover); }
+.dup-member:hover { background: var(--fs-surface-hover); }
.dup-score {
font-size: 0.75rem;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
font-variant-numeric: tabular-nums;
white-space: nowrap;
}
/* A set someone already ruled on — quiet, not celebratory: it means "skip". */
.dup-claimed {
font-size: 0.72rem;
- color: var(--color-text-muted);
- border: 1px solid var(--color-border);
+ color: var(--fs-text-tertiary);
+ border: 1px solid var(--fs-border-color);
border-radius: 4px;
padding: 0.05rem 0.4rem;
white-space: nowrap;
diff --git a/frontend/src/views/LoginView.vue b/frontend/src/views/LoginView.vue
index cb396bb..76e2584 100644
--- a/frontend/src/views/LoginView.vue
+++ b/frontend/src/views/LoginView.vue
@@ -123,9 +123,9 @@ function loginWithOAuth() {
.auth-card {
width: 100%;
max-width: 400px;
- background: var(--color-bg-card);
- border: 1px solid var(--color-border);
- border-radius: var(--radius-md);
+ background: var(--fs-surface-raised);
+ border: 1px solid var(--fs-border-color);
+ border-radius: var(--fs-radius-lg);
padding: 2rem;
}
.auth-brand {
@@ -142,11 +142,11 @@ function loginWithOAuth() {
.auth-hint {
text-align: center;
font-size: 0.9rem;
- color: var(--color-text-secondary);
+ color: var(--fs-text-secondary);
margin-bottom: 1rem;
}
.auth-hint a {
- color: var(--color-primary);
+ color: var(--fs-accent);
}
.field {
margin-bottom: 1rem;
@@ -160,19 +160,19 @@ function loginWithOAuth() {
.input {
width: 100%;
padding: 0.5rem 0.75rem;
- border: 1px solid var(--color-border);
- border-radius: var(--radius-sm);
+ border: 1px solid var(--fs-border-color);
+ border-radius: var(--fs-radius-sm);
font-size: 0.95rem;
- background: var(--color-bg);
- color: var(--color-text);
+ background: var(--fs-surface-page);
+ color: var(--fs-text-primary);
box-sizing: border-box;
}
.input:focus {
outline: none;
- border-color: var(--color-primary);
+ border-color: var(--fs-accent);
}
.error-msg {
- color: var(--color-danger);
+ color: var(--fs-error);
font-size: 0.9rem;
margin: 0 0 0.75rem;
}
@@ -181,23 +181,23 @@ function loginWithOAuth() {
align-items: center;
gap: 0.75rem;
margin: 1.25rem 0;
- color: var(--color-text-secondary);
+ color: var(--fs-text-secondary);
font-size: 0.85rem;
}
.divider::before,
.divider::after {
content: "";
flex: 1;
- border-top: 1px solid var(--color-border);
+ border-top: 1px solid var(--fs-border-color);
}
.auth-footer {
text-align: center;
font-size: 0.9rem;
- color: var(--color-text-secondary);
+ color: var(--fs-text-secondary);
margin: 1rem 0 0;
}
.auth-footer a {
- color: var(--color-primary);
+ color: var(--fs-accent);
}
.forgot-link {
text-align: right;
@@ -205,9 +205,9 @@ function loginWithOAuth() {
font-size: 0.85rem;
}
.forgot-link a {
- color: var(--color-text-secondary);
+ color: var(--fs-text-secondary);
}
.forgot-link a:hover {
- color: var(--color-primary);
+ color: var(--fs-accent);
}
diff --git a/frontend/src/views/LogsView.vue b/frontend/src/views/LogsView.vue
index 20007cd..fc11604 100644
--- a/frontend/src/views/LogsView.vue
+++ b/frontend/src/views/LogsView.vue
@@ -263,9 +263,9 @@ function clearFilters() {
margin: 0 0 1.5rem;
}
.settings-section {
- background: var(--color-bg-card);
- border: 1px solid var(--color-border);
- border-radius: var(--radius-md);
+ background: var(--fs-surface-raised);
+ border: 1px solid var(--fs-border-color);
+ border-radius: var(--fs-radius-lg);
padding: 1.25rem;
margin-bottom: 1.5rem;
}
@@ -292,23 +292,23 @@ function clearFilters() {
.stat-count {
font-size: 1.5rem;
font-weight: 700;
- color: var(--color-text);
+ color: var(--fs-text-primary);
}
.stat-label {
font-size: 0.75rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.05em;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
}
.stat-audit {
- color: var(--color-primary);
+ color: var(--fs-accent);
}
.stat-usage {
- color: var(--color-success);
+ color: var(--fs-success);
}
.stat-error {
- color: var(--color-danger);
+ color: var(--fs-error);
}
/* Filters */
@@ -321,10 +321,10 @@ function clearFilters() {
.filter-input,
.filter-date {
padding: 0.4rem 0.6rem;
- border: 1px solid var(--color-border);
- border-radius: var(--radius-sm);
- background: var(--color-bg);
- color: var(--color-text);
+ border: 1px solid var(--fs-border-color);
+ border-radius: var(--fs-radius-sm);
+ background: var(--fs-surface-page);
+ color: var(--fs-text-primary);
font-size: 0.85rem;
}
.filter-select {
@@ -342,7 +342,7 @@ function clearFilters() {
.loading-msg,
.empty-msg {
text-align: center;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
font-size: 0.9rem;
padding: 1rem 0;
}
@@ -356,13 +356,13 @@ function clearFilters() {
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.05em;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
padding: 0.5rem 0.75rem;
- border-bottom: 1px solid var(--color-border);
+ border-bottom: 1px solid var(--fs-border-color);
}
.logs-table td {
padding: 0.5rem 0.75rem;
- border-bottom: 1px solid var(--color-border);
+ border-bottom: 1px solid var(--fs-border-color);
font-size: 0.85rem;
}
.logs-table tbody tr:last-child td {
@@ -373,18 +373,18 @@ function clearFilters() {
transition: background 0.1s;
}
.log-row:hover {
- background: var(--color-bg-secondary);
+ background: var(--fs-surface-raised);
}
.row-expanded {
- background: var(--color-bg-secondary);
+ background: var(--fs-surface-raised);
}
.cell-time {
white-space: nowrap;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
font-size: 0.8rem;
}
.cell-user {
- color: var(--color-text-secondary);
+ color: var(--fs-text-secondary);
}
.cell-action {
max-width: 280px;
@@ -399,22 +399,22 @@ function clearFilters() {
.cell-ip {
font-family: monospace;
font-size: 0.8rem;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
white-space: nowrap;
}
.cell-duration {
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
font-size: 0.8rem;
white-space: nowrap;
}
.detail-ip {
font-family: monospace;
font-size: 0.8rem;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
margin-bottom: 0.4rem;
}
.text-error {
- color: var(--color-danger);
+ color: var(--fs-error);
}
/* Category badges */
@@ -425,19 +425,19 @@ function clearFilters() {
text-transform: uppercase;
letter-spacing: 0.05em;
padding: 0.1rem 0.35rem;
- border-radius: var(--radius-sm);
+ border-radius: var(--fs-radius-sm);
}
.cat-audit {
- color: var(--color-primary);
- background: color-mix(in srgb, var(--color-primary) 15%, transparent);
+ color: var(--fs-accent);
+ background: color-mix(in srgb, var(--fs-accent) 15%, transparent);
}
.cat-usage {
- color: var(--color-success);
- background: color-mix(in srgb, var(--color-success) 15%, transparent);
+ color: var(--fs-success);
+ background: color-mix(in srgb, var(--fs-success) 15%, transparent);
}
.cat-error {
- color: var(--color-danger);
- background: color-mix(in srgb, var(--color-danger) 15%, transparent);
+ color: var(--fs-error);
+ background: color-mix(in srgb, var(--fs-error) 15%, transparent);
}
/* Method tag */
@@ -448,8 +448,8 @@ function clearFilters() {
font-family: monospace;
padding: 0.05rem 0.25rem;
border-radius: 3px;
- background: var(--color-bg-secondary);
- color: var(--color-text-muted);
+ background: var(--fs-surface-raised);
+ color: var(--fs-text-tertiary);
margin-right: 0.25rem;
}
@@ -458,14 +458,14 @@ function clearFilters() {
cells don't carry, and the row exists to scope the rule below (#2444). */
.detail-row td {
padding: 0 0.75rem 0.75rem;
- border-bottom: 1px solid var(--color-border);
+ border-bottom: 1px solid var(--fs-border-color);
}
.detail-json {
margin: 0;
padding: 0.75rem;
- background: var(--color-bg);
- border: 1px solid var(--color-border);
- border-radius: var(--radius-sm);
+ background: var(--fs-surface-page);
+ border: 1px solid var(--fs-border-color);
+ border-radius: var(--fs-radius-sm);
font-size: 0.8rem;
overflow-x: auto;
white-space: pre-wrap;
diff --git a/frontend/src/views/NoteEditorView.vue b/frontend/src/views/NoteEditorView.vue
index 0698d2f..86ee526 100644
--- a/frontend/src/views/NoteEditorView.vue
+++ b/frontend/src/views/NoteEditorView.vue
@@ -633,13 +633,13 @@ onUnmounted(() => assist.clearSelection());
gap: 0.75rem;
flex-wrap: wrap;
padding-bottom: 0.5rem;
- border-bottom: 1px solid var(--color-border);
+ border-bottom: 1px solid var(--fs-border-color);
}
.editor-tabs {
display: inline-flex;
- background: var(--color-bg);
- border: 1px solid var(--color-border);
+ background: var(--fs-surface-page);
+ border: 1px solid var(--fs-border-color);
border-radius: 8px;
padding: 2px;
gap: 2px;
@@ -653,14 +653,14 @@ onUnmounted(() => assist.clearSelection());
padding: 0.22rem 0.75rem;
font-size: 0.78rem;
font-weight: 500;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
cursor: pointer;
transition: background 0.15s, color 0.15s;
}
-.tab:hover { color: var(--color-text); }
+.tab:hover { color: var(--fs-text-primary); }
.tab.active {
- background: var(--color-surface);
- color: var(--color-text);
+ background: var(--fs-surface-hover);
+ color: var(--fs-text-primary);
box-shadow: 0 1px 3px rgba(0,0,0,0.12);
}
@@ -679,14 +679,14 @@ onUnmounted(() => assist.clearSelection());
.stream-label {
font-size: 0.8rem;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
}
.stream-preview {
- border: 1px solid var(--color-input-border);
- border-radius: var(--radius-sm);
+ border: 1px solid var(--fs-border-color);
+ border-radius: var(--fs-radius-sm);
padding: 0.75rem;
- background: var(--color-bg-card);
+ background: var(--fs-surface-raised);
min-height: 200px;
}
@@ -699,7 +699,7 @@ onUnmounted(() => assist.clearSelection());
.note-sidebar {
width: 280px;
flex-shrink: 0;
- border-left: 1px solid var(--color-border);
+ border-left: 1px solid var(--fs-border-color);
overflow-y: auto;
display: flex;
flex-direction: column;
@@ -708,17 +708,17 @@ onUnmounted(() => assist.clearSelection());
.sb-select, .sb-input {
width: 100%;
padding: 5px 8px;
- border-radius: var(--radius-sm);
- border: 1px solid var(--color-input-border);
- background: var(--color-bg-tertiary);
- color: var(--color-text);
+ border-radius: var(--fs-radius-sm);
+ border: 1px solid var(--fs-border-color);
+ background: var(--fs-surface-hover);
+ color: var(--fs-text-primary);
font-size: 0.82rem;
font-family: inherit;
outline: none;
transition: border-color 0.15s;
}
.sb-select:focus, .sb-input:focus {
- border-color: var(--color-primary);
+ border-color: var(--fs-accent);
}
/* Tag suggest row inside sidebar */
@@ -742,13 +742,13 @@ onUnmounted(() => assist.clearSelection());
font-size: 0.72rem;
padding: 0.15rem 0.5rem;
background: none;
- border: 1px solid var(--color-primary);
- border-radius: var(--radius-sm);
- color: var(--color-primary);
+ border: 1px solid var(--fs-accent);
+ border-radius: var(--fs-radius-sm);
+ color: var(--fs-accent);
cursor: pointer;
font-family: inherit;
}
-.btn-link-all:hover { background: var(--color-action-primary); color: var(--fs-text-on-action); }
+.btn-link-all:hover { background: var(--fs-action-primary); color: var(--fs-text-on-action); }
.link-suggest-list {
display: flex;
@@ -766,14 +766,14 @@ onUnmounted(() => assist.clearSelection());
.link-suggest-title {
flex: 1;
font-family: monospace;
- color: var(--color-primary);
+ color: var(--fs-accent);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.link-suggest-count {
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
font-size: 0.72rem;
flex-shrink: 0;
}
@@ -783,13 +783,13 @@ onUnmounted(() => assist.clearSelection());
font-size: 0.72rem;
padding: 0.1rem 0.4rem;
background: none;
- border: 1px solid var(--color-border);
- border-radius: var(--radius-sm);
+ border: 1px solid var(--fs-border-color);
+ border-radius: var(--fs-radius-sm);
cursor: pointer;
font-family: inherit;
- color: var(--color-text-secondary);
+ color: var(--fs-text-secondary);
}
-.btn-apply-link:hover { border-color: var(--color-primary); color: var(--color-primary); }
+.btn-apply-link:hover { border-color: var(--fs-accent); color: var(--fs-accent); }
/* Writing Assistant section */
.assist-section {
@@ -801,7 +801,7 @@ onUnmounted(() => assist.clearSelection());
.assist-section-title {
font-size: 0.78rem;
font-weight: 500;
- color: var(--color-text-secondary);
+ color: var(--fs-text-secondary);
text-transform: uppercase;
letter-spacing: 0.05em;
}
@@ -810,19 +810,19 @@ onUnmounted(() => assist.clearSelection());
.ef-label {
font-family: 'Fraunces', Georgia, serif;
font-size: 0.92rem;
- color: var(--color-primary);
+ color: var(--fs-accent);
}
.prompt-editor {
width: 100%;
min-height: 60vh;
margin-top: 8px;
padding: 14px 16px;
- border: 1px solid var(--color-border);
+ border: 1px solid var(--fs-border-color);
border-radius: 8px;
- background: var(--color-surface);
- color: var(--color-text);
+ background: var(--fs-surface-hover);
+ color: var(--fs-text-primary);
/* Prompts are plain markdown — a code-style editor, not rich text. */
- font-family: var(--font-mono);
+ font-family: var(--fs-font-mono);
font-size: 0.88rem;
line-height: 1.55;
tab-size: 2;
@@ -830,7 +830,7 @@ onUnmounted(() => assist.clearSelection());
outline: none;
}
.prompt-editor:focus {
- border-color: var(--color-primary);
+ border-color: var(--fs-accent);
}
/* Narrow screen: sidebar collapses */
@media (max-width: 720px) {
@@ -839,7 +839,7 @@ onUnmounted(() => assist.clearSelection());
.note-sidebar {
width: 100%;
border-left: none;
- border-top: 1px solid var(--color-border);
+ border-top: 1px solid var(--fs-border-color);
overflow-y: visible;
}
}
diff --git a/frontend/src/views/NoteViewerView.vue b/frontend/src/views/NoteViewerView.vue
index 7e89d34..9c09f32 100644
--- a/frontend/src/views/NoteViewerView.vue
+++ b/frontend/src/views/NoteViewerView.vue
@@ -340,7 +340,7 @@ async function convertToTask() {
gap: 0.5rem;
flex-wrap: wrap;
font-size: 0.83rem;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
margin: 0 0 0.75rem;
}
.meta-item {
@@ -359,7 +359,7 @@ async function convertToTask() {
}
.backlinks {
margin-top: 2.5rem;
- border-top: 1px solid var(--color-border);
+ border-top: 1px solid var(--fs-border-color);
padding-top: 1.25rem;
}
.backlinks-heading {
@@ -370,14 +370,14 @@ async function convertToTask() {
font-weight: 500;
text-transform: uppercase;
letter-spacing: 0.06em;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
margin: 0 0 0.75rem;
}
.backlinks-count {
margin-left: 0.2rem;
font-size: 0.72rem;
- background: var(--color-bg-secondary);
- border: 1px solid var(--color-border);
+ background: var(--fs-surface-raised);
+ border: 1px solid var(--fs-border-color);
border-radius: 999px;
padding: 0 0.4rem;
line-height: 1.4;
@@ -392,18 +392,18 @@ async function convertToTask() {
align-items: center;
gap: 0.6rem;
padding: 0.5rem 0.75rem;
- border-radius: var(--radius-md);
- background: var(--color-bg-card);
- border: 1px solid var(--color-border);
+ border-radius: var(--fs-radius-lg);
+ background: var(--fs-surface-raised);
+ border: 1px solid var(--fs-border-color);
text-decoration: none;
- color: var(--color-text);
+ color: var(--fs-text-primary);
transition: border-color 0.15s, box-shadow 0.15s;
font-size: 0.9rem;
}
.backlink-card:hover {
- border-color: color-mix(in srgb, var(--color-primary) 50%, transparent);
+ border-color: color-mix(in srgb, var(--fs-accent) 50%, transparent);
box-shadow: 0 2px 8px rgba(0,0,0,0.06);
- color: var(--color-primary);
+ color: var(--fs-accent);
}
.backlink-type-badge {
font-size: 0.68rem;
@@ -415,9 +415,9 @@ async function convertToTask() {
flex-shrink: 0;
}
.badge-note {
- background: color-mix(in srgb, var(--color-primary) 12%, transparent);
- color: var(--color-primary);
- border: 1px solid color-mix(in srgb, var(--color-primary) 25%, transparent);
+ background: color-mix(in srgb, var(--fs-accent) 12%, transparent);
+ color: var(--fs-accent);
+ border: 1px solid color-mix(in srgb, var(--fs-accent) 25%, transparent);
}
.badge-task {
background: color-mix(in srgb, #f59e0b 12%, transparent);
@@ -446,12 +446,12 @@ async function convertToTask() {
.skel-title,
.skel-meta,
.skel-line {
- border-radius: var(--radius-sm);
+ border-radius: var(--fs-radius-sm);
background: linear-gradient(
90deg,
- var(--color-bg-secondary) 25%,
- color-mix(in srgb, var(--color-text-muted) 18%, var(--color-bg-secondary)) 50%,
- var(--color-bg-secondary) 75%
+ var(--fs-surface-raised) 25%,
+ color-mix(in srgb, var(--fs-text-tertiary) 18%, var(--fs-surface-raised)) 50%,
+ var(--fs-surface-raised) 75%
);
background-size: 200% 100%;
animation: skel-shine 1.5s ease infinite;
@@ -463,7 +463,7 @@ async function convertToTask() {
}
.skel-btn { width: 70px; height: 32px; }
.skel-btn--wide { width: 90px; }
-.skel-title { height: 2.2rem; width: 70%; border-radius: var(--radius-md); }
+.skel-title { height: 2.2rem; width: 70%; border-radius: var(--fs-radius-lg); }
.skel-meta { height: 0.85rem; width: 40%; }
.skel-line { height: 0.9rem; }
.skel-line--short { width: 55%; }
diff --git a/frontend/src/views/ProjectListView.vue b/frontend/src/views/ProjectListView.vue
index 89b851d..3ecdf16 100644
--- a/frontend/src/views/ProjectListView.vue
+++ b/frontend/src/views/ProjectListView.vue
@@ -317,9 +317,9 @@ function overallPct(project: Project): { total: number; pct: number } {
diff --git a/frontend/src/views/RegisterView.vue b/frontend/src/views/RegisterView.vue
index 6c0d42f..d7ef192 100644
--- a/frontend/src/views/RegisterView.vue
+++ b/frontend/src/views/RegisterView.vue
@@ -141,9 +141,9 @@ async function handleSubmit() {
.auth-card {
width: 100%;
max-width: 400px;
- background: var(--color-bg-card);
- border: 1px solid var(--color-border);
- border-radius: var(--radius-md);
+ background: var(--fs-surface-raised);
+ border: 1px solid var(--fs-border-color);
+ border-radius: var(--fs-radius-lg);
padding: 2rem;
}
.auth-brand {
@@ -159,13 +159,13 @@ async function handleSubmit() {
}
.loading-msg {
text-align: center;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
font-size: 0.9rem;
padding: 1rem 0;
}
.closed-msg {
text-align: center;
- color: var(--color-text-secondary);
+ color: var(--fs-text-secondary);
font-size: 0.95rem;
padding: 0.5rem 0;
}
@@ -184,45 +184,45 @@ async function handleSubmit() {
.input {
width: 100%;
padding: 0.5rem 0.75rem;
- border: 1px solid var(--color-border);
- border-radius: var(--radius-sm);
+ border: 1px solid var(--fs-border-color);
+ border-radius: var(--fs-radius-sm);
font-size: 0.95rem;
- background: var(--color-bg);
- color: var(--color-text);
+ background: var(--fs-surface-page);
+ color: var(--fs-text-primary);
box-sizing: border-box;
}
.input:focus {
outline: none;
- border-color: var(--color-primary);
+ border-color: var(--fs-accent);
}
.input-error {
- border-color: var(--color-danger);
+ border-color: var(--fs-error);
}
.input-error:focus {
- border-color: var(--color-danger);
+ border-color: var(--fs-error);
}
.field-hint {
margin: 0.35rem 0 0;
font-size: 0.8rem;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
}
.error-hint {
margin: 0.35rem 0 0;
font-size: 0.8rem;
- color: var(--color-danger);
+ color: var(--fs-error);
}
.error-msg {
- color: var(--color-danger);
+ color: var(--fs-error);
font-size: 0.9rem;
margin: 0 0 0.75rem;
}
.auth-footer {
text-align: center;
font-size: 0.9rem;
- color: var(--color-text-secondary);
+ color: var(--fs-text-secondary);
margin: 1rem 0 0;
}
.auth-footer a {
- color: var(--color-primary);
+ color: var(--fs-accent);
}
diff --git a/frontend/src/views/ResetPasswordView.vue b/frontend/src/views/ResetPasswordView.vue
index 51e6c03..1cfc2bb 100644
--- a/frontend/src/views/ResetPasswordView.vue
+++ b/frontend/src/views/ResetPasswordView.vue
@@ -117,9 +117,9 @@ async function handleSubmit() {
.auth-card {
width: 100%;
max-width: 400px;
- background: var(--color-bg-card);
- border: 1px solid var(--color-border);
- border-radius: var(--radius-md);
+ background: var(--fs-surface-raised);
+ border: 1px solid var(--fs-border-color);
+ border-radius: var(--fs-radius-lg);
padding: 2rem;
}
.auth-brand {
@@ -135,7 +135,7 @@ async function handleSubmit() {
}
.error-block {
text-align: center;
- color: var(--color-text-secondary);
+ color: var(--fs-text-secondary);
font-size: 0.95rem;
padding: 0.5rem 0;
}
@@ -144,7 +144,7 @@ async function handleSubmit() {
}
.success-msg {
text-align: center;
- color: var(--color-text-secondary);
+ color: var(--fs-text-secondary);
font-size: 0.95rem;
padding: 0.5rem 0;
}
@@ -163,45 +163,45 @@ async function handleSubmit() {
.input {
width: 100%;
padding: 0.5rem 0.75rem;
- border: 1px solid var(--color-border);
- border-radius: var(--radius-sm);
+ border: 1px solid var(--fs-border-color);
+ border-radius: var(--fs-radius-sm);
font-size: 0.95rem;
- background: var(--color-bg);
- color: var(--color-text);
+ background: var(--fs-surface-page);
+ color: var(--fs-text-primary);
box-sizing: border-box;
}
.input:focus {
outline: none;
- border-color: var(--color-primary);
+ border-color: var(--fs-accent);
}
.input-error {
- border-color: var(--color-danger);
+ border-color: var(--fs-error);
}
.input-error:focus {
- border-color: var(--color-danger);
+ border-color: var(--fs-error);
}
.field-hint {
margin: 0.35rem 0 0;
font-size: 0.8rem;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
}
.error-hint {
margin: 0.35rem 0 0;
font-size: 0.8rem;
- color: var(--color-danger);
+ color: var(--fs-error);
}
.error-msg {
- color: var(--color-danger);
+ color: var(--fs-error);
font-size: 0.9rem;
margin: 0 0 0.75rem;
}
.auth-footer {
text-align: center;
font-size: 0.9rem;
- color: var(--color-text-secondary);
+ color: var(--fs-text-secondary);
margin: 1rem 0 0;
}
.auth-footer a {
- color: var(--color-primary);
+ color: var(--fs-accent);
}
diff --git a/frontend/src/views/RulesView.vue b/frontend/src/views/RulesView.vue
index 459b619..1236267 100644
--- a/frontend/src/views/RulesView.vue
+++ b/frontend/src/views/RulesView.vue
@@ -107,10 +107,10 @@ watch(() => route.query, syncFromRoute);
grid-template-columns: 280px 300px 1fr;
height: 100vh;
gap: 1px;
- background: var(--color-border);
+ background: var(--fs-border-color);
}
.pane.empty {
- background: var(--color-surface);
+ background: var(--fs-surface-hover);
padding: 1rem;
opacity: 0.6;
font-style: italic;
diff --git a/frontend/src/views/SettingsView.vue b/frontend/src/views/SettingsView.vue
index 96a7b9f..e8ffb56 100644
--- a/frontend/src/views/SettingsView.vue
+++ b/frontend/src/views/SettingsView.vue
@@ -2353,7 +2353,7 @@ function formatUserDate(iso: string): string {
font-weight: 500;
text-transform: uppercase;
letter-spacing: 0.07em;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
padding: 0.25rem 0.75rem 0.2rem;
}
.sidebar-item {
@@ -2366,19 +2366,19 @@ function formatUserDate(iso: string): string {
background: none;
cursor: pointer;
font-size: 0.875rem;
- color: var(--color-text-secondary);
- border-radius: 0 var(--radius-sm) var(--radius-sm) 0;
+ color: var(--fs-text-secondary);
+ border-radius: 0 var(--fs-radius-sm) var(--fs-radius-sm) 0;
transition: color 0.15s, background 0.15s, border-color 0.15s;
font-family: inherit;
}
.sidebar-item:hover {
- color: var(--color-text);
- background: var(--color-bg-secondary);
+ color: var(--fs-text-primary);
+ background: var(--fs-surface-raised);
}
.sidebar-item.active {
- color: var(--color-primary);
- background: color-mix(in srgb, var(--color-primary) 8%, transparent);
- border-left-color: var(--color-primary);
+ color: var(--fs-accent);
+ background: color-mix(in srgb, var(--fs-accent) 8%, transparent);
+ border-left-color: var(--fs-accent);
font-weight: 500;
}
@@ -2396,9 +2396,9 @@ function formatUserDate(iso: string): string {
align-items: start;
}
.settings-section {
- background: var(--color-bg-card);
- border: 1px solid var(--color-border);
- border-radius: var(--radius-md);
+ background: var(--fs-surface-raised);
+ border: 1px solid var(--fs-border-color);
+ border-radius: var(--fs-radius-lg);
padding: 1.25rem;
}
.settings-section.full-width {
@@ -2410,12 +2410,12 @@ function formatUserDate(iso: string): string {
font-weight: 500;
text-transform: uppercase;
letter-spacing: 0.07em;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
}
.section-desc {
margin: 0 0 1rem;
font-size: 0.875rem;
- color: var(--color-text-secondary);
+ color: var(--fs-text-secondary);
line-height: 1.5;
}
@@ -2429,8 +2429,8 @@ function formatUserDate(iso: string): string {
.model-row {
display: flex; align-items: center; justify-content: space-between; gap: 0.5rem;
padding: 0.45rem 0.6rem;
- background: var(--color-bg-secondary);
- border: 1px solid var(--color-border);
+ background: var(--fs-surface-raised);
+ border: 1px solid var(--fs-border-color);
border-radius: 6px;
}
.model-row-info { display: flex; align-items: center; gap: 0.4rem; min-width: 0; flex: 1; }
@@ -2439,44 +2439,44 @@ function formatUserDate(iso: string): string {
font-size: 0.68rem; padding: 0.1rem 0.4rem; border-radius: 3px; font-weight: 500; white-space: nowrap;
}
.model-badge--loaded { background: color-mix(in srgb, #22c55e 18%, transparent); color: #22c55e; }
-.model-badge--default { background: color-mix(in srgb, var(--color-primary) 18%, transparent); color: var(--color-primary); }
+.model-badge--default { background: color-mix(in srgb, var(--fs-accent) 18%, transparent); color: var(--fs-accent); }
.model-row-right { display: flex; align-items: center; gap: 0.5rem; flex-shrink: 0; }
-.model-size { font-size: 0.78rem; color: var(--color-text-muted); }
+.model-size { font-size: 0.78rem; color: var(--fs-text-tertiary); }
.model-delete-btn {
- background: none; border: none; cursor: pointer; color: var(--color-text-muted);
+ background: none; border: none; cursor: pointer; color: var(--fs-text-tertiary);
font-size: 0.8rem; padding: 0.2rem 0.35rem; border-radius: 3px; line-height: 1;
transition: color 0.15s, background 0.15s;
}
-.model-delete-btn:hover:not(:disabled) { color: var(--color-action-destructive); background: color-mix(in srgb, var(--color-action-destructive) 10%, transparent); }
+.model-delete-btn:hover:not(:disabled) { color: var(--fs-action-destructive); background: color-mix(in srgb, var(--fs-action-destructive) 10%, transparent); }
.model-delete-btn:disabled { opacity: 0.4; cursor: default; }
.model-pull-form { display: flex; gap: 0.5rem; margin-top: 0.5rem; }
.model-pull-form .input { flex: 1; }
.model-suggestions { display: flex; align-items: center; gap: 0.35rem; flex-wrap: wrap; margin-top: 0.4rem; }
-.suggestions-label { font-size: 0.75rem; color: var(--color-text-muted); white-space: nowrap; }
+.suggestions-label { font-size: 0.75rem; color: var(--fs-text-tertiary); white-space: nowrap; }
.suggestion-chip {
font-size: 0.72rem; padding: 0.15rem 0.5rem; border-radius: 4px;
- border: 1px solid var(--color-border); background: var(--color-bg-card);
- cursor: pointer; font-family: monospace; color: var(--color-text);
+ border: 1px solid var(--fs-border-color); background: var(--fs-surface-raised);
+ cursor: pointer; font-family: monospace; color: var(--fs-text-primary);
transition: border-color 0.12s, background 0.12s;
}
-.suggestion-chip:hover:not(:disabled) { border-color: var(--color-primary); background: color-mix(in srgb, var(--color-primary) 8%, var(--color-bg-card)); }
+.suggestion-chip:hover:not(:disabled) { border-color: var(--fs-accent); background: color-mix(in srgb, var(--fs-accent) 8%, var(--fs-surface-raised)); }
.suggestion-chip:disabled { opacity: 0.4; cursor: default; }
.model-pull-progress { margin-top: 0.6rem; }
-.pull-status { font-size: 0.8rem; color: var(--color-text-muted); margin-bottom: 0.25rem; }
+.pull-status { font-size: 0.8rem; color: var(--fs-text-tertiary); margin-bottom: 0.25rem; }
.pull-bar-track {
- height: 4px; background: var(--color-border); border-radius: 2px; overflow: hidden;
+ height: 4px; background: var(--fs-border-color); border-radius: 2px; overflow: hidden;
}
.pull-bar-fill {
- height: 100%; background: var(--color-primary); border-radius: 2px;
+ height: 100%; background: var(--fs-accent); border-radius: 2px;
transition: width 0.3s ease;
}
.pull-bar-indeterminate {
- height: 4px; background: var(--color-border); border-radius: 2px;
+ height: 4px; background: var(--fs-border-color); border-radius: 2px;
position: relative; overflow: hidden;
}
.pull-bar-indeterminate::after {
content: ""; position: absolute; top: 0; left: -40%;
- width: 40%; height: 100%; background: var(--color-primary); border-radius: 2px;
+ width: 40%; height: 100%; background: var(--fs-accent); border-radius: 2px;
animation: indeterminate 1.2s ease-in-out infinite;
}
@keyframes indeterminate {
@@ -2503,27 +2503,27 @@ function formatUserDate(iso: string): string {
font-size: 0.875rem;
font-weight: 500;
margin-bottom: 0.35rem;
- color: var(--color-text);
+ color: var(--fs-text-primary);
}
.input {
width: 100%;
padding: 0.45rem 0.7rem;
- border: 1px solid var(--color-border);
- border-radius: var(--radius-sm);
+ border: 1px solid var(--fs-border-color);
+ border-radius: var(--fs-radius-sm);
font-size: 0.9rem;
- background: var(--color-bg);
- color: var(--color-text);
+ background: var(--fs-surface-page);
+ color: var(--fs-text-primary);
box-sizing: border-box;
font-family: inherit;
}
.input:focus {
outline: none;
- border-color: var(--color-primary);
+ border-color: var(--fs-accent);
}
.field-hint {
margin: 0.3rem 0 0;
font-size: 0.78rem;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
}
.field-hint-warn {
display: block;
@@ -2552,12 +2552,12 @@ function formatUserDate(iso: string): string {
font-size: 0.82rem;
padding: 0.2rem 0;
}
-.db-maint-table-list .dm-status { color: var(--color-text-muted); }
-.db-maint-table-list li.dm-failed .dm-status { color: var(--color-danger); }
+.db-maint-table-list .dm-status { color: var(--fs-text-tertiary); }
+.db-maint-table-list li.dm-failed .dm-status { color: var(--fs-error); }
/* DB table-health readout */
.db-health { margin-top: 1.5rem; }
-.db-health-total { color: var(--color-text-muted); font-weight: 400; }
+.db-health-total { color: var(--fs-text-tertiary); font-weight: 400; }
.db-health-scroll { overflow-x: auto; margin-top: 0.5rem; }
.db-health-table {
width: 100%;
@@ -2567,35 +2567,35 @@ function formatUserDate(iso: string): string {
.db-health-table th, .db-health-table td {
text-align: left;
padding: 0.35rem 0.6rem;
- border-bottom: 1px solid var(--color-border);
+ border-bottom: 1px solid var(--fs-border-color);
white-space: nowrap;
}
.db-health-table th {
font-size: 0.72rem;
text-transform: uppercase;
letter-spacing: 0.04em;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
font-weight: 500;
}
.db-health-table td.num, .db-health-table th.num { text-align: right; font-variant-numeric: tabular-nums; }
-.db-health-table tr.dh-warn td { color: var(--color-warning); }
-.db-health-table tr.dh-warn td:first-child code { color: var(--color-warning); }
+.db-health-table tr.dh-warn td { color: var(--fs-warning); }
+.db-health-table tr.dh-warn td:first-child code { color: var(--fs-warning); }
.btn-warn:hover:not(:disabled) {
- background: var(--color-warning);
+ background: var(--fs-warning);
color: var(--fs-text-on-action);
}
.saved-msg {
- color: var(--color-success);
+ color: var(--fs-success);
font-size: 0.875rem;
font-weight: 500;
}
-.input-error { border-color: var(--color-danger); }
-.input-error:focus { border-color: var(--color-danger); }
+.input-error { border-color: var(--fs-error); }
+.input-error:focus { border-color: var(--fs-error); }
.error-hint {
margin: 0.3rem 0 0;
font-size: 0.78rem;
- color: var(--color-danger);
+ color: var(--fs-error);
}
.retention-row {
@@ -2623,21 +2623,21 @@ function formatUserDate(iso: string): string {
align-items: center;
gap: 0.5rem;
font-size: 0.9rem;
- color: var(--color-text);
+ color: var(--fs-text-primary);
cursor: pointer;
}
.checkbox-field input[type="checkbox"] {
width: 16px;
height: 16px;
- accent-color: var(--color-primary);
+ accent-color: var(--fs-accent);
}
/* Search test */
.url-chip {
font-size: 0.8rem;
padding: 0.1rem 0.4rem;
- background: var(--color-bg-secondary);
- border: 1px solid var(--color-border);
+ background: var(--fs-surface-raised);
+ border: 1px solid var(--fs-border-color);
border-radius: 4px;
}
.not-configured {
@@ -2652,7 +2652,7 @@ function formatUserDate(iso: string): string {
.search-row .input { flex: 1; }
.search-error {
font-size: 0.875rem;
- color: var(--color-danger);
+ color: var(--fs-error);
margin: 0 0 0.5rem;
}
.search-results {
@@ -2665,9 +2665,9 @@ function formatUserDate(iso: string): string {
}
.search-result {
padding: 0.65rem 0.85rem;
- background: var(--color-bg-secondary);
- border: 1px solid var(--color-border);
- border-radius: var(--radius-sm);
+ background: var(--fs-surface-raised);
+ border: 1px solid var(--fs-border-color);
+ border-radius: var(--fs-radius-sm);
}
.result-header {
display: flex;
@@ -2679,20 +2679,20 @@ function formatUserDate(iso: string): string {
.result-title {
font-size: 0.9rem;
font-weight: 500;
- color: var(--color-primary);
+ color: var(--fs-accent);
text-decoration: none;
word-break: break-word;
}
.result-title:hover { text-decoration: underline; }
.result-host {
font-size: 0.75rem;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
white-space: nowrap;
}
.result-snippet {
margin: 0;
font-size: 0.82rem;
- color: var(--color-text-secondary);
+ color: var(--fs-text-secondary);
line-height: 1.45;
display: -webkit-box;
-webkit-line-clamp: 2;
@@ -2721,10 +2721,10 @@ function formatUserDate(iso: string): string {
margin: 0 0 0.5rem;
font-size: 0.875rem;
font-weight: 500;
- color: var(--color-text-secondary);
+ color: var(--fs-text-secondary);
}
.test-email-section {
- border-top: 1px solid var(--color-border);
+ border-top: 1px solid var(--fs-border-color);
padding-top: 1rem;
}
.test-email-row {
@@ -2737,7 +2737,7 @@ function formatUserDate(iso: string): string {
/* Push notifications */
.push-unsupported {
font-size: 0.875rem;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
}
.push-status-row {
display: flex;
@@ -2747,7 +2747,7 @@ function formatUserDate(iso: string): string {
font-size: 0.875rem;
}
.push-status-label {
- color: var(--color-text-secondary);
+ color: var(--fs-text-secondary);
font-weight: 500;
}
.push-permission-badge,
@@ -2758,15 +2758,15 @@ function formatUserDate(iso: string): string {
letter-spacing: 0.04em;
padding: 0.1rem 0.4rem;
border-radius: 999px;
- background: color-mix(in srgb, var(--color-text-muted) 15%, transparent);
- color: var(--color-text-muted);
+ background: color-mix(in srgb, var(--fs-text-tertiary) 15%, transparent);
+ color: var(--fs-text-tertiary);
}
-.perm-granted { background: color-mix(in srgb, var(--color-success) 15%, transparent); color: var(--color-success); }
-.perm-denied { background: color-mix(in srgb, var(--color-danger) 15%, transparent); color: var(--color-danger); }
-.sub-active { background: color-mix(in srgb, var(--color-success) 15%, transparent); color: var(--color-success); }
+.perm-granted { background: color-mix(in srgb, var(--fs-success) 15%, transparent); color: var(--fs-success); }
+.perm-denied { background: color-mix(in srgb, var(--fs-error) 15%, transparent); color: var(--fs-error); }
+.sub-active { background: color-mix(in srgb, var(--fs-success) 15%, transparent); color: var(--fs-success); }
.push-error {
font-size: 0.82rem;
- color: var(--color-danger);
+ color: var(--fs-error);
margin: 0.25rem 0 0;
}
@@ -2780,7 +2780,7 @@ function formatUserDate(iso: string): string {
position: static;
padding-right: 0;
padding-bottom: 0.5rem;
- border-bottom: 1px solid var(--color-border);
+ border-bottom: 1px solid var(--fs-border-color);
margin-bottom: 1rem;
}
.sidebar-group {
@@ -2796,13 +2796,13 @@ function formatUserDate(iso: string): string {
width: auto;
border-left: none;
border-bottom: 2px solid transparent;
- border-radius: var(--radius-sm) var(--radius-sm) 0 0;
+ border-radius: var(--fs-radius-sm) var(--fs-radius-sm) 0 0;
font-size: 0.82rem;
padding: 0.35rem 0.7rem;
}
.sidebar-item.active {
- border-bottom-color: var(--color-primary);
- background: var(--color-primary-tint);
+ border-bottom-color: var(--fs-accent);
+ background: var(--fs-accent-soft);
}
.settings-grid {
grid-template-columns: 1fr;
@@ -2827,8 +2827,8 @@ function formatUserDate(iso: string): string {
}
.registration-info { flex: 1; }
.registration-status { margin: 0; font-size: 0.95rem; }
-.text-success { color: var(--color-success); }
-.text-muted { color: var(--color-text-muted); }
+.text-success { color: var(--fs-success); }
+.text-muted { color: var(--fs-text-tertiary); }
.invite-form {
display: flex;
gap: 0.5rem;
@@ -2840,7 +2840,7 @@ function formatUserDate(iso: string): string {
margin: 0 0 0.5rem;
font-size: 0.85rem;
font-weight: 500;
- color: var(--color-text-secondary);
+ color: var(--fs-text-secondary);
}
.users-table { width: 100%; border-collapse: collapse; }
.users-table th {
@@ -2849,19 +2849,19 @@ function formatUserDate(iso: string): string {
font-weight: 500;
text-transform: uppercase;
letter-spacing: 0.05em;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
padding: 0.5rem 0.75rem;
- border-bottom: 1px solid var(--color-border);
+ border-bottom: 1px solid var(--fs-border-color);
}
.users-table td {
padding: 0.65rem 0.75rem;
- border-bottom: 1px solid var(--color-border);
+ border-bottom: 1px solid var(--fs-border-color);
font-size: 0.9rem;
}
.users-table tbody tr:last-child td { border-bottom: none; }
.cell-username { font-weight: 500; }
-.cell-email { color: var(--color-text-secondary); }
-.cell-date { color: var(--color-text-muted); font-size: 0.85rem; }
+.cell-email { color: var(--fs-text-secondary); }
+.cell-date { color: var(--fs-text-tertiary); font-size: 0.85rem; }
.cell-actions { white-space: nowrap; }
.role-badge {
display: inline-block;
@@ -2870,17 +2870,17 @@ function formatUserDate(iso: string): string {
text-transform: uppercase;
letter-spacing: 0.05em;
padding: 0.15rem 0.4rem;
- border-radius: var(--radius-sm);
+ border-radius: var(--fs-radius-sm);
}
.role-admin {
- color: var(--color-primary);
- background: color-mix(in srgb, var(--color-primary) 15%, transparent);
+ color: var(--fs-accent);
+ background: color-mix(in srgb, var(--fs-accent) 15%, transparent);
}
.role-user {
- color: var(--color-text-muted);
- background: var(--color-bg-secondary);
+ color: var(--fs-text-tertiary);
+ background: var(--fs-surface-raised);
}
-.you-label { font-size: 0.8rem; color: var(--color-text-muted); }
+.you-label { font-size: 0.8rem; color: var(--fs-text-tertiary); }
/* Per-row delete (users / invitations / etc.): ghost → Oxblood on hover */
/* Logs panel */
@@ -2894,17 +2894,17 @@ function formatUserDate(iso: string): string {
align-items: center;
gap: 0.15rem;
}
-.stat-count { font-size: 1.5rem; font-weight: 500; color: var(--color-text); }
+.stat-count { font-size: 1.5rem; font-weight: 500; color: var(--fs-text-primary); }
.stat-label {
font-size: 0.75rem;
font-weight: 500;
text-transform: uppercase;
letter-spacing: 0.05em;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
}
-.stat-audit { color: var(--color-primary); }
-.stat-usage { color: var(--color-success); }
-.stat-error { color: var(--color-danger); }
+.stat-audit { color: var(--fs-accent); }
+.stat-usage { color: var(--fs-success); }
+.stat-error { color: var(--fs-error); }
.filter-bar { display: flex; gap: 0.5rem; flex-wrap: wrap; margin-bottom: 0.75rem; }
.filter-select { min-width: 140px; }
@@ -2918,49 +2918,49 @@ function formatUserDate(iso: string): string {
font-weight: 500;
text-transform: uppercase;
letter-spacing: 0.05em;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
padding: 0.5rem 0.75rem;
- border-bottom: 1px solid var(--color-border);
+ border-bottom: 1px solid var(--fs-border-color);
}
.logs-table td {
padding: 0.5rem 0.75rem;
- border-bottom: 1px solid var(--color-border);
+ border-bottom: 1px solid var(--fs-border-color);
font-size: 0.85rem;
}
.logs-table tbody tr:last-child td { border-bottom: none; }
.log-row { cursor: pointer; transition: background 0.1s; }
-.log-row:hover { background: var(--color-bg-secondary); }
-.row-expanded { background: var(--color-bg-secondary); }
-.cell-time { white-space: nowrap; color: var(--color-text-muted); font-size: 0.8rem; }
-.cell-user { color: var(--color-text-secondary); }
+.log-row:hover { background: var(--fs-surface-raised); }
+.row-expanded { background: var(--fs-surface-raised); }
+.cell-time { white-space: nowrap; color: var(--fs-text-tertiary); font-size: 0.8rem; }
+.cell-user { color: var(--fs-text-secondary); }
.cell-action { max-width: 260px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cell-status { font-family: monospace; font-size: 0.85rem; }
-.cell-duration { color: var(--color-text-muted); font-size: 0.8rem; white-space: nowrap; }
-.text-error { color: var(--color-danger); }
+.cell-duration { color: var(--fs-text-tertiary); font-size: 0.8rem; white-space: nowrap; }
+.text-error { color: var(--fs-error); }
/* Bare by design, like LogsView's twin of this: a `
` has nothing to style
that its cells don't carry (#2444). */
-.detail-row td { padding: 0 0.75rem 0.75rem; border-bottom: 1px solid var(--color-border); }
-.detail-ip { font-family: monospace; font-size: 0.8rem; color: var(--color-text-muted); margin-bottom: 0.4rem; }
+.detail-row td { padding: 0 0.75rem 0.75rem; border-bottom: 1px solid var(--fs-border-color); }
+.detail-ip { font-family: monospace; font-size: 0.8rem; color: var(--fs-text-tertiary); margin-bottom: 0.4rem; }
.detail-json {
margin: 0; padding: 0.75rem;
- background: var(--color-bg); border: 1px solid var(--color-border);
- border-radius: var(--radius-sm); font-size: 0.8rem;
+ background: var(--fs-surface-page); border: 1px solid var(--fs-border-color);
+ border-radius: var(--fs-radius-sm); font-size: 0.8rem;
overflow-x: auto; white-space: pre-wrap; word-break: break-all; max-height: 300px;
}
.category-badge {
display: inline-block;
font-size: 0.65rem; font-weight: 500;
text-transform: uppercase; letter-spacing: 0.05em;
- padding: 0.1rem 0.35rem; border-radius: var(--radius-sm);
+ padding: 0.1rem 0.35rem; border-radius: var(--fs-radius-sm);
}
-.cat-audit { color: var(--color-primary); background: color-mix(in srgb, var(--color-primary) 15%, transparent); }
-.cat-usage { color: var(--color-success); background: color-mix(in srgb, var(--color-success) 15%, transparent); }
-.cat-error { color: var(--color-danger); background: color-mix(in srgb, var(--color-danger) 15%, transparent); }
+.cat-audit { color: var(--fs-accent); background: color-mix(in srgb, var(--fs-accent) 15%, transparent); }
+.cat-usage { color: var(--fs-success); background: color-mix(in srgb, var(--fs-success) 15%, transparent); }
+.cat-error { color: var(--fs-error); background: color-mix(in srgb, var(--fs-error) 15%, transparent); }
.method-tag {
display: inline-block;
font-size: 0.65rem; font-weight: 500; font-family: monospace;
padding: 0.05rem 0.25rem; border-radius: 3px;
- background: var(--color-bg-secondary); color: var(--color-text-muted);
+ background: var(--fs-surface-raised); color: var(--fs-text-tertiary);
margin-right: 0.25rem;
}
@@ -2968,7 +2968,7 @@ function formatUserDate(iso: string): string {
.version-line {
margin: 0;
font-size: 0.9rem;
- color: var(--color-text);
+ color: var(--fs-text-primary);
display: flex;
align-items: center;
gap: 0.6rem;
@@ -2977,10 +2977,10 @@ function formatUserDate(iso: string): string {
font-family: ui-monospace, monospace;
font-size: 0.8rem;
padding: 0.15rem 0.5rem;
- background: var(--color-bg-secondary);
- border: 1px solid var(--color-primary);
+ background: var(--fs-surface-raised);
+ border: 1px solid var(--fs-accent);
border-radius: 4px;
- color: var(--color-primary);
+ color: var(--fs-accent);
}
/* ── Groups tab ──────────────────────────────────────────────── */
@@ -2989,16 +2989,16 @@ function formatUserDate(iso: string): string {
.input-field {
width: 100%;
padding: 0.4rem 0.6rem;
- border: 1px solid var(--color-border);
- border-radius: var(--radius-sm);
- background: var(--color-surface);
- color: var(--color-text);
+ border: 1px solid var(--fs-border-color);
+ border-radius: var(--fs-radius-sm);
+ background: var(--fs-surface-hover);
+ color: var(--fs-text-primary);
font-size: 0.875rem;
font-family: inherit;
outline: none;
transition: border-color 0.15s;
}
-.input-field:focus { border-color: var(--color-primary); }
+.input-field:focus { border-color: var(--fs-accent); }
.group-create-form {
display: flex;
@@ -3010,7 +3010,7 @@ function formatUserDate(iso: string): string {
.group-create-form .input-field { flex: 1; min-width: 160px; }
.loading-msg, .empty-msg {
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
font-size: 0.88rem;
padding: 0.5rem 0;
}
@@ -3022,8 +3022,8 @@ function formatUserDate(iso: string): string {
}
.group-card {
- border: 1px solid var(--color-border);
- border-radius: var(--radius-md);
+ border: 1px solid var(--fs-border-color);
+ border-radius: var(--fs-radius-lg);
overflow: hidden;
}
@@ -3032,7 +3032,7 @@ function formatUserDate(iso: string): string {
align-items: center;
justify-content: space-between;
padding: 0.75rem 1rem;
- background: var(--color-bg-secondary);
+ background: var(--fs-surface-raised);
}
.group-card-info {
@@ -3046,16 +3046,16 @@ function formatUserDate(iso: string): string {
.group-name {
font-weight: 500;
font-size: 0.9rem;
- color: var(--color-text);
+ color: var(--fs-text-primary);
}
.group-meta {
font-size: 0.78rem;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
white-space: nowrap;
}
.group-desc {
font-size: 0.82rem;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
@@ -3078,8 +3078,8 @@ function formatUserDate(iso: string): string {
top: 100%;
left: 0;
right: 0;
- background: var(--color-surface);
- border: 1px solid var(--color-border);
+ background: var(--fs-surface-hover);
+ border: 1px solid var(--fs-border-color);
border-radius: 6px;
margin-top: 2px;
list-style: none;
@@ -3098,16 +3098,16 @@ function formatUserDate(iso: string): string {
cursor: pointer;
transition: background 0.1s;
}
-.member-result-item:hover { background: var(--color-hover); }
+.member-result-item:hover { background: var(--fs-surface-hover); }
.member-result-name { font-weight: 500; font-size: 0.85rem; }
-.member-result-email { color: var(--color-text-muted); font-size: 0.78rem; }
+.member-result-email { color: var(--fs-text-tertiary); font-size: 0.78rem; }
.role-select {
padding: 0.4rem 0.5rem;
- border: 1px solid var(--color-border);
+ border: 1px solid var(--fs-border-color);
border-radius: 6px;
- background: var(--color-surface);
- color: var(--color-text);
+ background: var(--fs-surface-hover);
+ color: var(--fs-text-primary);
font-size: 0.85rem;
cursor: pointer;
font-family: inherit;
@@ -3128,10 +3128,10 @@ function formatUserDate(iso: string): string {
gap: 0.5rem;
padding: 0.4rem 0.5rem;
border-radius: 6px;
- background: var(--color-hover);
+ background: var(--fs-surface-hover);
}
-.member-name { flex: 1; font-size: 0.88rem; font-weight: 500; color: var(--color-text); }
+.member-name { flex: 1; font-size: 0.88rem; font-weight: 500; color: var(--fs-text-primary); }
.member-role-badge {
font-size: 0.7rem;
@@ -3141,11 +3141,11 @@ function formatUserDate(iso: string): string {
padding: 0.15rem 0.4rem;
border-radius: 4px;
}
-.role-owner { background: color-mix(in srgb, var(--color-warning) 15%, transparent); color: var(--color-warning); }
-.role-member { background: color-mix(in srgb, var(--color-muted) 15%, transparent); color: var(--color-muted); }
+.role-owner { background: color-mix(in srgb, var(--fs-warning) 15%, transparent); color: var(--fs-warning); }
+.role-member { background: color-mix(in srgb, var(--fs-text-tertiary) 15%, transparent); color: var(--fs-text-tertiary); }
.members-empty {
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
font-size: 0.82rem;
padding: 0.25rem 0.5rem;
}
@@ -3160,23 +3160,23 @@ function formatUserDate(iso: string): string {
font-size: 0.78rem;
margin: 0.2rem 0 0;
}
-.geo-ok { color: var(--color-success); }
-.geo-error { color: var(--color-danger); }
-.geo-pending { color: var(--color-text-muted); }
+.geo-ok { color: var(--fs-success); }
+.geo-error { color: var(--fs-error); }
+.geo-pending { color: var(--fs-text-tertiary); }
.unit-toggle {
display: flex;
gap: 0;
- border: 1px solid var(--color-border);
- border-radius: var(--radius-sm);
+ border: 1px solid var(--fs-border-color);
+ border-radius: var(--fs-radius-sm);
overflow: hidden;
width: fit-content;
margin-top: 0.25rem;
}
.unit-btn {
padding: 0.4rem 1rem;
- background: var(--color-bg-card);
- color: var(--color-text-muted);
+ background: var(--fs-surface-raised);
+ color: var(--fs-text-tertiary);
font-size: 0.85rem;
cursor: pointer;
border: none;
@@ -3184,14 +3184,14 @@ function formatUserDate(iso: string): string {
transition: background 0.15s, color 0.15s;
}
.unit-btn:not(:last-child) {
- border-right: 1px solid var(--color-border);
+ border-right: 1px solid var(--fs-border-color);
}
.unit-btn.active {
- background: var(--color-action-primary);
+ background: var(--fs-action-primary);
color: var(--fs-text-on-action);
}
.unit-btn:hover:not(.active) {
- color: var(--color-text);
+ color: var(--fs-text-primary);
}
.checkbox-label {
@@ -3216,7 +3216,7 @@ function formatUserDate(iso: string): string {
}
.time-sep {
font-size: 1.1rem;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
}
.time-sep--quiet { font-size: 0.9rem; }
@@ -3239,9 +3239,9 @@ function formatUserDate(iso: string): string {
cursor: pointer;
}
.api-key-reveal {
- background: color-mix(in srgb, var(--color-primary) 8%, var(--color-surface));
- border: 1px solid color-mix(in srgb, var(--color-primary) 30%, transparent);
- border-radius: var(--radius-md);
+ background: color-mix(in srgb, var(--fs-accent) 8%, var(--fs-surface-hover));
+ border: 1px solid color-mix(in srgb, var(--fs-accent) 30%, transparent);
+ border-radius: var(--fs-radius-lg);
padding: 1rem;
margin-bottom: 1.5rem;
}
@@ -3253,9 +3253,9 @@ function formatUserDate(iso: string): string {
}
.api-key-value {
flex: 1;
- background: var(--color-surface-2);
+ background: var(--fs-surface-hover);
padding: 0.4rem 0.6rem;
- border-radius: var(--radius-sm);
+ border-radius: var(--fs-radius-sm);
font-size: 0.85rem;
word-break: break-all;
}
@@ -3267,7 +3267,7 @@ function formatUserDate(iso: string): string {
.api-keys-table th, .api-keys-table td {
text-align: left;
padding: 0.5rem 0.75rem;
- border-bottom: 1px solid var(--color-border);
+ border-bottom: 1px solid var(--fs-border-color);
font-size: 0.9rem;
}
.api-keys-table th { font-weight: 500; opacity: 0.7; }
@@ -3292,8 +3292,8 @@ function formatUserDate(iso: string): string {
align-items: center;
gap: 1rem;
padding: 0.65rem 0.9rem;
- background: color-mix(in srgb, var(--color-primary) 8%, transparent);
- border: 1px solid color-mix(in srgb, var(--color-primary) 25%, transparent);
+ background: color-mix(in srgb, var(--fs-accent) 8%, transparent);
+ border: 1px solid color-mix(in srgb, var(--fs-accent) 25%, transparent);
border-radius: 8px;
}
.mcp-pkg-name { font-family: monospace; font-size: 0.9rem; flex: 1; }
@@ -3303,8 +3303,8 @@ function formatUserDate(iso: string): string {
.mcp-code {
margin-top: 0.4rem;
padding: 0.55rem 0.75rem;
- background: color-mix(in srgb, var(--color-text) 6%, transparent);
- border: 1px solid var(--color-border);
+ background: color-mix(in srgb, var(--fs-text-primary) 6%, transparent);
+ border: 1px solid var(--fs-border-color);
border-radius: 6px;
font-size: 0.82rem;
font-family: monospace;
@@ -3317,23 +3317,23 @@ function formatUserDate(iso: string): string {
display: flex;
gap: 0.25rem;
margin-bottom: 1rem;
- border-bottom: 1px solid var(--color-border);
+ border-bottom: 1px solid var(--fs-border-color);
}
.mcp-client-tab {
background: transparent;
border: none;
padding: 0.5rem 0.9rem;
font-size: 0.85rem;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
cursor: pointer;
border-bottom: 2px solid transparent;
margin-bottom: -1px;
transition: color 0.15s, border-color 0.15s;
}
-.mcp-client-tab:hover { color: var(--color-text); }
+.mcp-client-tab:hover { color: var(--fs-text-primary); }
.mcp-client-tab.active {
- color: var(--color-primary);
- border-bottom-color: var(--color-primary);
+ color: var(--fs-accent);
+ border-bottom-color: var(--fs-accent);
font-weight: 500;
}
.mcp-url-block { margin-top: 0.25rem; }
@@ -3371,7 +3371,7 @@ function formatUserDate(iso: string): string {
.mcp-code-row .btn-sm { white-space: nowrap; }
.mcp-advanced {
margin-top: 1.25rem;
- border-top: 1px solid var(--color-border);
+ border-top: 1px solid var(--fs-border-color);
padding-top: 0.75rem;
}
.mcp-advanced summary {
@@ -3428,7 +3428,7 @@ function formatUserDate(iso: string): string {
list-style: none;
margin: 0;
padding: 0;
- border-top: 1px solid var(--color-border);
+ border-top: 1px solid var(--fs-border-color);
max-height: 480px;
overflow-y: auto;
}
@@ -3438,19 +3438,19 @@ function formatUserDate(iso: string): string {
justify-content: space-between;
gap: 1rem;
padding: 0.65rem 0.25rem;
- border-bottom: 1px solid var(--color-border);
+ border-bottom: 1px solid var(--fs-border-color);
}
.voice-library-meta {
min-width: 0;
flex: 1;
}
.voice-library-id {
- font-family: var(--font-mono);
+ font-family: var(--fs-font-mono);
font-size: 0.9rem;
font-weight: 500;
}
.voice-library-sub {
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
font-size: 0.8rem;
margin-top: 0.15rem;
}
@@ -3462,7 +3462,7 @@ function formatUserDate(iso: string): string {
}
.voice-library-empty {
padding: 1rem 0;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
text-align: center;
font-style: italic;
}
@@ -3475,9 +3475,9 @@ function formatUserDate(iso: string): string {
letter-spacing: 0.04em;
}
.voice-badge--bundled {
- background: color-mix(in srgb, var(--color-text-muted) 10%, transparent);
- color: var(--color-text-muted);
- border: 1px solid var(--color-border);
+ background: color-mix(in srgb, var(--fs-text-tertiary) 10%, transparent);
+ color: var(--fs-text-tertiary);
+ border: 1px solid var(--fs-border-color);
}
.status-badge {
font-size: 0.75rem;
@@ -3486,14 +3486,14 @@ function formatUserDate(iso: string): string {
border-radius: 999px;
}
.status-on {
- background: color-mix(in srgb, var(--color-success) 15%, transparent);
- color: var(--color-success);
- border: 1px solid color-mix(in srgb, var(--color-success) 40%, transparent);
+ background: color-mix(in srgb, var(--fs-success) 15%, transparent);
+ color: var(--fs-success);
+ border: 1px solid color-mix(in srgb, var(--fs-success) 40%, transparent);
}
.status-off {
- background: color-mix(in srgb, var(--color-text-muted) 10%, transparent);
- color: var(--color-text-muted);
- border: 1px solid var(--color-border);
+ background: color-mix(in srgb, var(--fs-text-tertiary) 10%, transparent);
+ color: var(--fs-text-tertiary);
+ border: 1px solid var(--fs-border-color);
}
.radio-group {
display: flex;
@@ -3513,7 +3513,7 @@ function formatUserDate(iso: string): string {
.range-input {
width: 100%;
max-width: 360px;
- accent-color: var(--color-primary);
+ accent-color: var(--fs-accent);
margin: 0.35rem 0 0.2rem;
}
.range-labels {
@@ -3521,7 +3521,7 @@ function formatUserDate(iso: string): string {
justify-content: space-between;
max-width: 360px;
font-size: 0.75rem;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
}
.form-actions {
margin-top: 1rem;
@@ -3539,7 +3539,7 @@ function formatUserDate(iso: string): string {
width: 4px;
height: 4px;
border-radius: 50%;
- background: var(--color-text-muted);
+ background: var(--fs-text-tertiary);
animation: va-dot-bounce 1.2s ease-in-out infinite;
}
.voice-admin-spinner span:nth-child(2) { animation-delay: 0.2s; }
@@ -3553,9 +3553,9 @@ function formatUserDate(iso: string): string {
margin-bottom: 0.5rem;
}
.blend-slot {
- background: color-mix(in srgb, var(--color-surface) 60%, transparent);
- border: 1px solid var(--color-border);
- border-radius: var(--radius-md);
+ background: color-mix(in srgb, var(--fs-surface-hover) 60%, transparent);
+ border: 1px solid var(--fs-border-color);
+ border-radius: var(--fs-radius-lg);
padding: 0.75rem 1rem;
display: flex;
flex-direction: column;
@@ -3577,7 +3577,7 @@ function formatUserDate(iso: string): string {
font-variant-numeric: tabular-nums;
min-width: 2.5rem;
text-align: right;
- color: var(--color-text-secondary);
+ color: var(--fs-text-secondary);
}
.blend-actions {
margin-top: 0.25rem;
@@ -3599,37 +3599,37 @@ function formatUserDate(iso: string): string {
}
.day-btn {
padding: 0.3rem 0.65rem;
- border: 1px solid var(--color-border);
+ border: 1px solid var(--fs-border-color);
border-radius: 6px;
- background: var(--color-bg-card);
- color: var(--color-text-muted);
+ background: var(--fs-surface-raised);
+ color: var(--fs-text-tertiary);
font-size: 0.82rem;
cursor: pointer;
transition: all 0.15s;
font-family: inherit;
}
-.day-btn:hover { border-color: var(--color-primary); color: var(--color-primary); }
+.day-btn:hover { border-color: var(--fs-accent); color: var(--fs-accent); }
.day-btn.active {
- background: color-mix(in srgb, var(--color-primary) 15%, transparent);
- border-color: var(--color-primary);
- color: var(--color-primary);
+ background: color-mix(in srgb, var(--fs-accent) 15%, transparent);
+ border-color: var(--fs-accent);
+ color: var(--fs-accent);
font-weight: 500;
}
.learned-summary {
- background: var(--color-bg-secondary);
- border: 1px solid var(--color-border);
- border-left: 3px solid var(--color-primary);
+ background: var(--fs-surface-raised);
+ border: 1px solid var(--fs-border-color);
+ border-left: 3px solid var(--fs-accent);
border-radius: 8px;
padding: 0.85rem 1rem;
font-size: 0.9rem;
line-height: 1.55;
- color: var(--color-text);
+ color: var(--fs-text-primary);
white-space: pre-wrap;
margin-bottom: 0.75rem;
}
.learned-empty {
font-size: 0.85rem;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
margin-bottom: 0.75rem;
}
diff --git a/frontend/src/views/SharedWithMeView.vue b/frontend/src/views/SharedWithMeView.vue
index 2884543..79e9bf7 100644
--- a/frontend/src/views/SharedWithMeView.vue
+++ b/frontend/src/views/SharedWithMeView.vue
@@ -106,11 +106,11 @@ onMounted(async () => {
font-size: 1.8rem;
font-weight: 700;
margin: 0;
- color: var(--color-text);
+ color: var(--fs-text-primary);
}
.loading-state {
- color: var(--color-muted);
+ color: var(--fs-text-tertiary);
padding: 2rem;
text-align: center;
}
@@ -124,7 +124,7 @@ onMounted(async () => {
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.07em;
- color: var(--color-muted);
+ color: var(--fs-text-tertiary);
margin: 0 0 0.75rem;
}
@@ -136,9 +136,9 @@ onMounted(async () => {
.shared-card {
display: flex;
- background: var(--color-surface);
- border: 1px solid var(--color-border);
- border-radius: var(--radius-lg);
+ background: var(--fs-surface-hover);
+ border: 1px solid var(--fs-border-color);
+ border-radius: var(--fs-radius-xl);
overflow: hidden;
text-decoration: none;
transition: box-shadow 0.15s, transform 0.15s;
@@ -151,7 +151,7 @@ onMounted(async () => {
.card-color-bar {
width: 4px;
flex-shrink: 0;
- background: var(--color-border);
+ background: var(--fs-border-color);
}
.card-body {
@@ -163,7 +163,7 @@ onMounted(async () => {
.card-title {
font-weight: 600;
font-size: 0.95rem;
- color: var(--color-text);
+ color: var(--fs-text-primary);
margin-bottom: 0.3rem;
white-space: nowrap;
overflow: hidden;
@@ -179,12 +179,12 @@ onMounted(async () => {
.card-owner {
font-size: 0.78rem;
- color: var(--color-muted);
+ color: var(--fs-text-tertiary);
}
.card-desc {
font-size: 0.82rem;
- color: var(--color-muted);
+ color: var(--fs-text-tertiary);
margin: 0;
overflow: hidden;
display: -webkit-box;
@@ -203,25 +203,25 @@ onMounted(async () => {
align-items: center;
gap: 0.6rem;
padding: 0.6rem 0.9rem;
- background: var(--color-surface);
- border: 1px solid var(--color-border);
+ background: var(--fs-surface-hover);
+ border: 1px solid var(--fs-border-color);
border-radius: 8px;
text-decoration: none;
transition: background 0.1s;
}
.shared-row:hover {
- background: var(--color-hover);
+ background: var(--fs-surface-hover);
}
.row-icon {
font-size: 0.9rem;
flex-shrink: 0;
- color: var(--color-muted);
+ color: var(--fs-text-tertiary);
}
.row-title {
flex: 1;
font-size: 0.9rem;
- color: var(--color-text);
+ color: var(--fs-text-primary);
font-weight: 500;
white-space: nowrap;
overflow: hidden;
@@ -229,7 +229,7 @@ onMounted(async () => {
}
.row-owner {
font-size: 0.78rem;
- color: var(--color-muted);
+ color: var(--fs-text-tertiary);
white-space: nowrap;
}
@@ -242,12 +242,12 @@ onMounted(async () => {
border-radius: 4px;
white-space: nowrap;
}
-.perm-viewer { background: color-mix(in srgb, var(--color-muted) 15%, transparent); color: var(--color-muted); }
-.perm-editor { background: color-mix(in srgb, var(--color-primary) 15%, transparent); color: var(--color-primary); }
-.perm-admin { background: color-mix(in srgb, var(--color-warning) 15%, transparent); color: var(--color-warning); }
+.perm-viewer { background: color-mix(in srgb, var(--fs-text-tertiary) 15%, transparent); color: var(--fs-text-tertiary); }
+.perm-editor { background: color-mix(in srgb, var(--fs-accent) 15%, transparent); color: var(--fs-accent); }
+.perm-admin { background: color-mix(in srgb, var(--fs-warning) 15%, transparent); color: var(--fs-warning); }
.empty-msg {
- color: var(--color-muted);
+ color: var(--fs-text-tertiary);
font-size: 0.88rem;
margin: 0;
padding: 1rem 0;
diff --git a/frontend/src/views/SnippetDetailView.vue b/frontend/src/views/SnippetDetailView.vue
index 625d1c2..d2a0360 100644
--- a/frontend/src/views/SnippetDetailView.vue
+++ b/frontend/src/views/SnippetDetailView.vue
@@ -205,7 +205,7 @@ async function confirmDelete() {
.snippet-detail {
max-width: 820px;
margin: 2rem auto;
- padding: 0 var(--page-padding-x);
+ padding: 0 var(--fs-layout-page-pad);
overflow-x: clip;
}
@@ -213,20 +213,20 @@ async function confirmDelete() {
display: inline-block;
margin-bottom: 1rem;
font-size: 0.85rem;
- color: var(--color-text-secondary);
+ color: var(--fs-text-secondary);
text-decoration: none;
}
.back-link:hover {
- color: var(--color-primary);
+ color: var(--fs-accent);
}
.state-msg {
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
font-size: 0.9rem;
margin-top: 1rem;
}
.error-msg {
- color: var(--color-danger);
+ color: var(--fs-error);
font-size: 0.9rem;
margin-top: 1rem;
}
@@ -239,7 +239,7 @@ async function confirmDelete() {
}
.snippet-name {
margin: 0;
- font-family: var(--font-mono);
+ font-family: var(--fs-font-mono);
font-size: 1.4rem;
word-break: break-word;
}
@@ -253,7 +253,7 @@ async function confirmDelete() {
.when-to-use {
margin: 0.75rem 0 1.25rem;
font-size: 1rem;
- color: var(--color-text-secondary);
+ color: var(--fs-text-secondary);
line-height: 1.55;
}
@@ -262,12 +262,12 @@ async function confirmDelete() {
.shared-notice {
margin: 0.75rem 0 0;
padding: 0.6rem 0.85rem;
- border-left: 3px solid var(--color-text-muted);
+ border-left: 3px solid var(--fs-text-tertiary);
border-radius: 6px;
- background: var(--color-bg-secondary);
+ background: var(--fs-surface-raised);
font-size: 0.85rem;
line-height: 1.5;
- color: var(--color-text-secondary);
+ color: var(--fs-text-secondary);
}
.meta-grid {
@@ -280,23 +280,23 @@ async function confirmDelete() {
font-size: 0.7rem;
text-transform: uppercase;
letter-spacing: 0.06em;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
padding-top: 0.15rem;
}
.meta-grid dd {
margin: 0;
font-size: 0.9rem;
- color: var(--color-text);
+ color: var(--fs-text-primary);
min-width: 0;
}
.meta-grid code,
.tag-row + * code {
- font-family: var(--font-mono);
+ font-family: var(--fs-font-mono);
font-size: 0.82rem;
- background: color-mix(in srgb, var(--color-primary) 12%, transparent);
- color: var(--color-primary);
+ background: color-mix(in srgb, var(--fs-accent) 12%, transparent);
+ color: var(--fs-accent);
padding: 0.08rem 0.35rem;
- border-radius: var(--radius-sm);
+ border-radius: var(--fs-radius-sm);
word-break: break-all;
}
.location-list {
@@ -317,7 +317,7 @@ async function confirmDelete() {
align-items: baseline;
}
.merged-hint {
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
font-size: 0.8rem;
}
.merged-entry {
@@ -328,15 +328,15 @@ async function confirmDelete() {
.unmerge-btn {
font-size: 0.72rem;
padding: 0.05rem 0.35rem;
- border: 1px solid var(--color-border);
+ border: 1px solid var(--fs-border-color);
border-radius: 4px;
background: transparent;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
cursor: pointer;
}
.unmerge-btn:hover:not(:disabled) {
- color: var(--color-text);
- border-color: var(--color-text-muted);
+ color: var(--fs-text-primary);
+ border-color: var(--fs-text-tertiary);
}
.unmerge-btn:disabled {
opacity: 0.6;
@@ -344,30 +344,30 @@ async function confirmDelete() {
}
.unmerge-na {
font-size: 0.72rem;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
/* Cursor cues that the explanation is in the tooltip. */
cursor: help;
}
.code-block {
- border: 1px solid var(--color-border);
- border-radius: var(--radius-md);
+ border: 1px solid var(--fs-border-color);
+ border-radius: var(--fs-radius-lg);
overflow: hidden;
- background: var(--color-bg);
+ background: var(--fs-surface-page);
}
.code-bar {
display: flex;
align-items: center;
justify-content: space-between;
padding: 0.4rem 0.5rem 0.4rem 0.85rem;
- border-bottom: 1px solid var(--color-border);
- background: var(--color-bg-secondary);
+ border-bottom: 1px solid var(--fs-border-color);
+ background: var(--fs-surface-raised);
}
.code-lang {
font-size: 0.72rem;
text-transform: uppercase;
letter-spacing: 0.06em;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
}
.btn-copy {
padding: 0.2rem 0.65rem;
@@ -379,10 +379,10 @@ async function confirmDelete() {
overflow-x: auto;
}
.code-block code {
- font-family: var(--font-mono);
+ font-family: var(--fs-font-mono);
font-size: 0.85rem;
line-height: 1.6;
- color: var(--color-text);
+ color: var(--fs-text-primary);
white-space: pre;
}
@@ -396,9 +396,9 @@ async function confirmDelete() {
font-size: 0.72rem;
padding: 0.15rem 0.5rem;
border-radius: 999px;
- background: var(--color-bg-secondary);
- color: var(--color-text-secondary);
- border: 1px solid var(--color-border);
+ background: var(--fs-surface-raised);
+ color: var(--fs-text-secondary);
+ border: 1px solid var(--fs-border-color);
}
@media (max-width: 600px) {
diff --git a/frontend/src/views/SnippetEditorView.vue b/frontend/src/views/SnippetEditorView.vue
index 435a0ba..30a4f7a 100644
--- a/frontend/src/views/SnippetEditorView.vue
+++ b/frontend/src/views/SnippetEditorView.vue
@@ -365,7 +365,7 @@ function cancel() {
.snippet-editor {
max-width: 760px;
margin: 2rem auto;
- padding: 0 var(--page-padding-x);
+ padding: 0 var(--fs-layout-page-pad);
overflow-x: clip;
}
.snippet-editor h1 {
@@ -376,19 +376,19 @@ function cancel() {
display: inline-block;
margin-bottom: 1rem;
font-size: 0.85rem;
- color: var(--color-text-secondary);
+ color: var(--fs-text-secondary);
text-decoration: none;
}
.back-link:hover {
- color: var(--color-primary);
+ color: var(--fs-accent);
}
.state-msg {
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
font-size: 0.9rem;
}
.error-msg {
- color: var(--color-danger);
+ color: var(--fs-error);
font-size: 0.9rem;
}
@@ -415,27 +415,27 @@ function cancel() {
.location-set legend {
font-size: 0.8rem;
font-weight: 500;
- color: var(--color-text);
+ color: var(--fs-text-primary);
}
.required {
- color: var(--color-danger);
+ color: var(--fs-error);
}
.hint {
font-size: 0.75rem;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
margin: 0.1rem 0 0;
}
.hint-inline {
font-weight: 400;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
}
.input {
padding: 0.5rem 0.7rem;
- border: 1px solid var(--color-border);
- border-radius: var(--radius-sm);
- background: var(--color-bg);
- color: var(--color-text);
+ border: 1px solid var(--fs-border-color);
+ border-radius: var(--fs-radius-sm);
+ background: var(--fs-surface-page);
+ color: var(--fs-text-primary);
font-size: 0.9rem;
font-family: inherit;
box-sizing: border-box;
@@ -443,11 +443,11 @@ function cancel() {
}
.input:focus {
outline: none;
- border-color: var(--color-primary);
- box-shadow: var(--focus-ring);
+ border-color: var(--fs-accent);
+ box-shadow: var(--fs-focus-ring);
}
.mono {
- font-family: var(--font-mono);
+ font-family: var(--fs-font-mono);
}
.code-area {
resize: vertical;
@@ -459,8 +459,8 @@ function cancel() {
}
.location-set {
- border: 1px solid var(--color-border);
- border-radius: var(--radius-md);
+ border: 1px solid var(--fs-border-color);
+ border-radius: var(--fs-radius-lg);
padding: 0.85rem 1rem 1rem;
margin: 0;
}
@@ -477,32 +477,32 @@ function cancel() {
.loc-remove {
width: 2rem;
height: 2rem;
- border: 1px solid var(--color-border);
+ border: 1px solid var(--fs-border-color);
background: transparent;
- color: var(--color-text-muted);
- border-radius: var(--radius-sm);
+ color: var(--fs-text-tertiary);
+ border-radius: var(--fs-radius-sm);
cursor: pointer;
font-size: 1.1rem;
line-height: 1;
}
.loc-remove:hover {
- border-color: var(--color-danger);
- color: var(--color-danger);
+ border-color: var(--fs-error);
+ color: var(--fs-error);
}
.loc-add {
margin-top: 0.15rem;
padding: 0.35rem 0.7rem;
- border: 1px dashed var(--color-border);
+ border: 1px dashed var(--fs-border-color);
background: transparent;
- color: var(--color-text-secondary);
- border-radius: var(--radius-sm);
+ color: var(--fs-text-secondary);
+ border-radius: var(--fs-radius-sm);
cursor: pointer;
font-size: 0.82rem;
font-family: inherit;
}
.loc-add:hover {
- border-color: var(--color-primary);
- color: var(--color-primary);
+ border-color: var(--fs-accent);
+ color: var(--fs-accent);
}
@media (max-width: 600px) {
@@ -514,7 +514,7 @@ function cancel() {
.field-label {
font-size: 0.8rem;
font-weight: 500;
- color: var(--color-text);
+ color: var(--fs-text-primary);
}
.systems {
display: flex;
@@ -528,11 +528,11 @@ function cancel() {
align-items: center;
gap: 0.45rem;
font-size: 0.85rem;
- color: var(--color-text);
+ color: var(--fs-text-primary);
cursor: pointer;
}
.system-opt input {
- accent-color: var(--color-primary);
+ accent-color: var(--fs-accent);
cursor: pointer;
}
@@ -541,25 +541,25 @@ function cancel() {
flex-direction: column;
gap: 0.4rem;
padding: 0.85rem 1rem;
- border: 1px solid var(--color-border);
- border-left: 3px solid var(--color-warning);
+ border: 1px solid var(--fs-border-color);
+ border-left: 3px solid var(--fs-warning);
border-radius: 8px;
- background: var(--color-bg-secondary);
+ background: var(--fs-surface-raised);
}
.duplicate-title {
margin: 0;
font-size: 0.85rem;
font-weight: 500;
- color: var(--color-text);
+ color: var(--fs-text-primary);
}
.duplicate-body {
margin: 0;
font-size: 0.8rem;
line-height: 1.5;
- color: var(--color-text-secondary);
+ color: var(--fs-text-secondary);
}
.duplicate-body a {
- color: var(--color-primary);
+ color: var(--fs-accent);
}
.duplicate-actions {
display: flex;
diff --git a/frontend/src/views/SnippetListView.vue b/frontend/src/views/SnippetListView.vue
index ed622d3..f9cb400 100644
--- a/frontend/src/views/SnippetListView.vue
+++ b/frontend/src/views/SnippetListView.vue
@@ -519,9 +519,9 @@ function usageTitle(s: SnippetListItem): string {
\ No newline at end of file
diff --git a/frontend/src/views/TaskViewerView.vue b/frontend/src/views/TaskViewerView.vue
index dc98184..cbdc077 100644
--- a/frontend/src/views/TaskViewerView.vue
+++ b/frontend/src/views/TaskViewerView.vue
@@ -475,7 +475,7 @@ const subTaskProgress = computed(() => {
gap: 0.5rem;
flex-wrap: wrap;
font-size: 0.83rem;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
margin: 0 0 0.75rem;
}
.meta-item {
@@ -494,10 +494,10 @@ const subTaskProgress = computed(() => {
}
.due-date {
font-size: 0.85rem;
- color: var(--color-text-secondary);
+ color: var(--fs-text-secondary);
}
.due-date.overdue {
- color: var(--color-overdue);
+ color: var(--fs-overdue);
font-weight: 500;
}
.task-meta-row {
@@ -508,10 +508,10 @@ const subTaskProgress = computed(() => {
}
.task-meta-item {
font-size: 0.78rem;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
}
.task-meta-recurrence {
- color: var(--color-primary);
+ color: var(--fs-accent);
font-weight: 500;
}
.tags {
@@ -524,7 +524,7 @@ const subTaskProgress = computed(() => {
/* Sub-tasks */
.subtasks {
margin-top: 2rem;
- border-top: 1px solid var(--color-border);
+ border-top: 1px solid var(--fs-border-color);
padding-top: 1rem;
}
.subtasks-header {
@@ -540,21 +540,21 @@ const subTaskProgress = computed(() => {
}
.subtasks-progress {
font-size: 0.8rem;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
}
.subtasks-pct {
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
}
.subtasks-track {
height: 4px;
- background: var(--color-bg-secondary);
+ background: var(--fs-surface-raised);
border-radius: 2px;
margin-bottom: 0.75rem;
overflow: hidden;
}
.subtasks-fill {
height: 100%;
- background: var(--color-status-done);
+ background: var(--fs-status-done);
border-radius: 2px;
transition: width 0.3s ease;
}
@@ -571,10 +571,10 @@ const subTaskProgress = computed(() => {
align-items: center;
gap: 0.5rem;
padding: 0.3rem 0.5rem;
- border-radius: var(--radius-sm);
+ border-radius: var(--fs-radius-sm);
}
.subtask-row:hover {
- background: var(--color-bg-secondary);
+ background: var(--fs-surface-raised);
}
.sub-dot {
flex-shrink: 0;
@@ -592,21 +592,21 @@ const subTaskProgress = computed(() => {
}
.dot-todo {
background: transparent;
- border: 2px solid var(--color-text-muted);
+ border: 2px solid var(--fs-text-tertiary);
}
.dot-in-progress {
- background: var(--color-status-in-progress);
+ background: var(--fs-status-in-progress);
}
.dot-done {
- background: var(--color-status-done);
+ background: var(--fs-status-done);
}
.dot-cancelled {
- background: var(--color-text-muted);
+ background: var(--fs-text-tertiary);
}
.sub-title {
flex: 1;
font-size: 0.9rem;
- color: var(--color-text);
+ color: var(--fs-text-primary);
text-decoration: none;
min-width: 0;
overflow: hidden;
@@ -614,21 +614,21 @@ const subTaskProgress = computed(() => {
white-space: nowrap;
}
.sub-title:hover {
- color: var(--color-primary);
+ color: var(--fs-accent);
}
.sub-title.sub-done {
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
text-decoration: line-through;
}
.sub-due {
font-size: 0.75rem;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
flex-shrink: 0;
}
.backlinks {
margin-top: 2.5rem;
- border-top: 1px solid var(--color-border);
+ border-top: 1px solid var(--fs-border-color);
padding-top: 1.25rem;
}
.backlinks-heading {
@@ -639,14 +639,14 @@ const subTaskProgress = computed(() => {
font-weight: 500;
text-transform: uppercase;
letter-spacing: 0.06em;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
margin: 0 0 0.75rem;
}
.backlinks-count {
margin-left: 0.2rem;
font-size: 0.72rem;
- background: var(--color-bg-secondary);
- border: 1px solid var(--color-border);
+ background: var(--fs-surface-raised);
+ border: 1px solid var(--fs-border-color);
border-radius: 999px;
padding: 0 0.4rem;
line-height: 1.4;
@@ -661,18 +661,18 @@ const subTaskProgress = computed(() => {
align-items: center;
gap: 0.6rem;
padding: 0.5rem 0.75rem;
- border-radius: var(--radius-md);
- background: var(--color-bg-card);
- border: 1px solid var(--color-border);
+ border-radius: var(--fs-radius-lg);
+ background: var(--fs-surface-raised);
+ border: 1px solid var(--fs-border-color);
text-decoration: none;
- color: var(--color-text);
+ color: var(--fs-text-primary);
transition: border-color 0.15s, box-shadow 0.15s;
font-size: 0.9rem;
}
.backlink-card:hover {
- border-color: color-mix(in srgb, var(--color-primary) 50%, transparent);
+ border-color: color-mix(in srgb, var(--fs-accent) 50%, transparent);
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
- color: var(--color-primary);
+ color: var(--fs-accent);
}
.backlink-type-badge {
font-size: 0.68rem;
@@ -684,9 +684,9 @@ const subTaskProgress = computed(() => {
flex-shrink: 0;
}
.badge-note {
- background: color-mix(in srgb, var(--color-primary) 12%, transparent);
- color: var(--color-primary);
- border: 1px solid color-mix(in srgb, var(--color-primary) 25%, transparent);
+ background: color-mix(in srgb, var(--fs-accent) 12%, transparent);
+ color: var(--fs-accent);
+ border: 1px solid color-mix(in srgb, var(--fs-accent) 25%, transparent);
}
.badge-task {
background: color-mix(in srgb, #f59e0b 12%, transparent);
@@ -716,12 +716,12 @@ const subTaskProgress = computed(() => {
.skel-meta,
.skel-badges,
.skel-line {
- border-radius: var(--radius-sm);
+ border-radius: var(--fs-radius-sm);
background: linear-gradient(
90deg,
- var(--color-bg-secondary) 25%,
- color-mix(in srgb, var(--color-text-muted) 18%, var(--color-bg-secondary)) 50%,
- var(--color-bg-secondary) 75%
+ var(--fs-surface-raised) 25%,
+ color-mix(in srgb, var(--fs-text-tertiary) 18%, var(--fs-surface-raised)) 50%,
+ var(--fs-surface-raised) 75%
);
background-size: 200% 100%;
animation: skel-shine 1.5s ease infinite;
@@ -733,7 +733,7 @@ const subTaskProgress = computed(() => {
}
.skel-btn { width: 70px; height: 32px; }
.skel-btn--wide { width: 90px; }
-.skel-title { height: 2.2rem; width: 65%; border-radius: var(--radius-md); }
+.skel-title { height: 2.2rem; width: 65%; border-radius: var(--fs-radius-lg); }
.skel-meta { height: 0.85rem; width: 45%; }
.skel-badges { height: 1.6rem; width: 30%; border-radius: 999px; }
.skel-line { height: 0.9rem; }
@@ -742,26 +742,26 @@ const subTaskProgress = computed(() => {
/* ── Goal block + auto-summary banner ─────────────────────────────────────── */
.task-goal-display {
- border-left: 2px solid var(--color-border);
+ border-left: 2px solid var(--fs-border-color);
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);
+ font-family: var(--fs-font-display);
font-style: italic;
font-size: 0.78rem;
font-weight: 500;
letter-spacing: 0.04em;
text-transform: uppercase;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
margin: 0 0 0.25rem;
}
.goal-text {
margin: 0;
font-size: 0.95rem;
line-height: 1.45;
- color: var(--color-text);
+ color: var(--fs-text-primary);
white-space: pre-wrap;
}
diff --git a/frontend/src/views/TrashView.vue b/frontend/src/views/TrashView.vue
index e954f60..0301312 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); 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); }
+.batch-actions button { border-radius: 6px; padding: 0.35rem 0.7rem; cursor: pointer; border: 1px solid var(--fs-border-color); background: none; color: inherit; }
+.btn-restore:hover { border-color: var(--fs-action-primary); color: var(--fs-action-primary); }
+.btn-purge:hover { border-color: var(--fs-action-destructive); color: var(--fs-action-destructive); }
diff --git a/frontend/src/views/UserManagementView.vue b/frontend/src/views/UserManagementView.vue
index ce0918f..f933ac3 100644
--- a/frontend/src/views/UserManagementView.vue
+++ b/frontend/src/views/UserManagementView.vue
@@ -297,9 +297,9 @@ function formatDate(iso: string): string {
margin: 0 0 1.5rem;
}
.settings-section {
- background: var(--color-bg-card);
- border: 1px solid var(--color-border);
- border-radius: var(--radius-md);
+ background: var(--fs-surface-raised);
+ border: 1px solid var(--fs-border-color);
+ border-radius: var(--fs-radius-lg);
padding: 1.25rem;
margin-bottom: 1.5rem;
}
@@ -317,16 +317,16 @@ function formatDate(iso: string): string {
.invite-input {
flex: 1;
padding: 0.5rem 0.75rem;
- border: 1px solid var(--color-border);
- border-radius: var(--radius-sm);
+ border: 1px solid var(--fs-border-color);
+ border-radius: var(--fs-radius-sm);
font-size: 0.95rem;
- background: var(--color-bg);
- color: var(--color-text);
+ background: var(--fs-surface-page);
+ color: var(--fs-text-primary);
box-sizing: border-box;
}
.invite-input:focus {
outline: none;
- border-color: var(--color-primary);
+ border-color: var(--fs-accent);
}
.invite-list {
margin-top: 1rem;
@@ -334,7 +334,7 @@ function formatDate(iso: string): string {
.invite-list h3 {
margin: 0 0 0.5rem;
font-size: 0.95rem;
- color: var(--color-text-secondary);
+ color: var(--fs-text-secondary);
}
/* Registration toggle */
@@ -352,33 +352,33 @@ function formatDate(iso: string): string {
font-size: 0.95rem;
}
.text-success {
- color: var(--color-success);
+ color: var(--fs-success);
}
.text-muted {
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
}
.field-hint {
margin: 0.35rem 0 0;
font-size: 0.8rem;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
}
/* The one genuine override: 'close registration' must NOT read as the
primary action it sits on. Scoped, so it beats the shared variant. */
.btn-toggle-close {
- background: var(--color-bg-secondary);
- color: var(--color-text);
- border: 1px solid var(--color-border);
+ background: var(--fs-surface-raised);
+ color: var(--fs-text-primary);
+ border: 1px solid var(--fs-border-color);
}
.btn-toggle-close:hover:not(:disabled) {
- border-color: var(--color-warning);
- color: var(--color-warning);
+ border-color: var(--fs-warning);
+ color: var(--fs-warning);
}
/* Users table */
.loading-msg,
.empty-msg {
text-align: center;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
font-size: 0.9rem;
padding: 1rem 0;
}
@@ -392,13 +392,13 @@ function formatDate(iso: string): string {
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.05em;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
padding: 0.5rem 0.75rem;
- border-bottom: 1px solid var(--color-border);
+ border-bottom: 1px solid var(--fs-border-color);
}
.users-table td {
padding: 0.65rem 0.75rem;
- border-bottom: 1px solid var(--color-border);
+ border-bottom: 1px solid var(--fs-border-color);
font-size: 0.9rem;
}
.users-table tbody tr:last-child td {
@@ -408,10 +408,10 @@ function formatDate(iso: string): string {
font-weight: 600;
}
.cell-email {
- color: var(--color-text-secondary);
+ color: var(--fs-text-secondary);
}
.cell-date {
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
font-size: 0.85rem;
}
.cell-actions {
@@ -426,21 +426,21 @@ function formatDate(iso: string): string {
text-transform: uppercase;
letter-spacing: 0.05em;
padding: 0.15rem 0.4rem;
- border-radius: var(--radius-sm);
+ border-radius: var(--fs-radius-sm);
}
.role-admin {
- color: var(--color-primary);
- background: color-mix(in srgb, var(--color-primary) 15%, transparent);
+ color: var(--fs-accent);
+ background: color-mix(in srgb, var(--fs-accent) 15%, transparent);
}
.role-user {
- color: var(--color-text-muted);
- background: var(--color-bg-secondary);
+ color: var(--fs-text-tertiary);
+ background: var(--fs-surface-raised);
}
/* Action buttons */
.you-label {
font-size: 0.8rem;
- color: var(--color-text-muted);
+ color: var(--fs-text-tertiary);
}
@media (max-width: 768px) {