refactor(theme): retire the --color-* shim — the sweep it promised, run
CI & Build / Python lint (push) Successful in 3s
CI & Build / Plugin hooks (push) Successful in 7s
CI & Build / integration (push) Successful in 17s
CI & Build / TypeScript typecheck (push) Successful in 34s
CI & Build / Python tests (push) Successful in 48s
CI & Build / Build & push image (push) Successful in 37s

#2533. theme.css claimed "removing this block is a rename sweep across the
components, tracked separately" — written in 67a529a, never filed, which made
the comment itself an instance of the survey's presence-without-reference
pattern. This is that sweep.

73 alias declarations deleted; 69 files rewritten; every --color-*-style name
now references its --fs-* token directly. Mechanical by construction: the map
IS the alias block, applied longest-name-first with a boundary guard so
--color-text never matched inside --color-text-muted. Zero survivors outside
theme.css, verified by grep rather than assumed.

One deliberate survivor: --color-shadow stays DECLARED, because it was never
an alias — it is a literal value the design system has no token for. Marked
in place as a recorded gap: promote it to an --fs-* token when a second app
needs it, don't copy the line.

Nothing is lost mode-wise: the aliases' resolve-at-use-time trick (which
absorbed 48 dark-mode overrides) lives one layer down in the --fs-* tokens'
own derivations, which is why the sweep is a pure rename. Both CSS checkers
green.

Why now rather than never: check_snippets_against_design_system reports every
--color-* reference as "unknown — renders as NOTHING", and nine recipe
snippets recorded from components.css carried the deprecated names, making
them prior art pointing the wrong way. With the sweep in, the checker's
report over re-recorded snippets should be EMPTY — the acceptance test that
proves the checker was right all along (#2517's correction).

Refs #2533
This commit is contained in:
2026-08-08 22:42:37 -04:00
parent 2d1e26f38f
commit 4ba544e2af
70 changed files with 1779 additions and 1884 deletions
+16 -16
View File
@@ -254,7 +254,7 @@ onUnmounted(() => {
left: 0.5rem; left: 0.5rem;
z-index: 9999; z-index: 9999;
padding: 0.4rem 0.75rem; padding: 0.4rem 0.75rem;
background: var(--color-primary); background: var(--fs-accent);
color: var(--fs-text-on-action); color: var(--fs-text-on-action);
border-radius: 0 0 4px 4px; border-radius: 0 0 4px 4px;
font-size: 0.875rem; font-size: 0.875rem;
@@ -290,7 +290,7 @@ onUnmounted(() => {
text-align: center; text-align: center;
padding: 0.2rem 0; padding: 0.2rem 0;
font-size: 0.68rem; font-size: 0.68rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
opacity: 0.45; opacity: 0.45;
user-select: none; user-select: none;
letter-spacing: 0.03em; letter-spacing: 0.03em;
@@ -300,16 +300,16 @@ onUnmounted(() => {
.shortcuts-overlay { .shortcuts-overlay {
position: fixed; position: fixed;
inset: 0; inset: 0;
background: var(--color-overlay); background: var(--fs-overlay);
z-index: 9000; z-index: 9000;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
} }
.shortcuts-panel { .shortcuts-panel {
background: var(--color-bg-card); background: var(--fs-surface-raised);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-md); border-radius: var(--fs-radius-lg);
box-shadow: 0 8px 32px var(--color-shadow); box-shadow: 0 8px 32px var(--color-shadow);
width: min(420px, 92vw); width: min(420px, 92vw);
overflow: hidden; overflow: hidden;
@@ -319,25 +319,25 @@ onUnmounted(() => {
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
padding: 0.85rem 1rem 0.75rem; padding: 0.85rem 1rem 0.75rem;
border-bottom: 1px solid var(--color-border); border-bottom: 1px solid var(--fs-border-color);
} }
.shortcuts-header h3 { .shortcuts-header h3 {
margin: 0; margin: 0;
font-size: 1rem; font-size: 1rem;
font-weight: 600; font-weight: 600;
color: var(--color-text); color: var(--fs-text-primary);
} }
.shortcuts-close { .shortcuts-close {
background: none; background: none;
border: none; border: none;
font-size: 1.4rem; font-size: 1.4rem;
line-height: 1; line-height: 1;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
cursor: pointer; cursor: pointer;
padding: 0 0.25rem; padding: 0 0.25rem;
} }
.shortcuts-close:hover { .shortcuts-close:hover {
color: var(--color-text); color: var(--fs-text-primary);
} }
.shortcuts-body { .shortcuts-body {
padding: 0.75rem 1rem 1rem; padding: 0.75rem 1rem 1rem;
@@ -350,7 +350,7 @@ onUnmounted(() => {
font-weight: 700; font-weight: 700;
text-transform: uppercase; text-transform: uppercase;
letter-spacing: 0.06em; letter-spacing: 0.06em;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
margin-bottom: 0.4rem; margin-bottom: 0.4rem;
} }
.shortcut-row { .shortcut-row {
@@ -365,23 +365,23 @@ onUnmounted(() => {
justify-content: center; justify-content: center;
min-width: 1.8rem; min-width: 1.8rem;
padding: 0.15rem 0.4rem; padding: 0.15rem 0.4rem;
background: var(--color-bg-secondary); background: var(--fs-surface-raised);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-bottom-width: 2px; border-bottom-width: 2px;
border-radius: 4px; border-radius: 4px;
font-size: 0.78rem; font-size: 0.78rem;
font-family: ui-monospace, monospace; font-family: ui-monospace, monospace;
color: var(--color-text); color: var(--fs-text-primary);
white-space: nowrap; white-space: nowrap;
user-select: none; user-select: none;
} }
.shortcut-key-sep { .shortcut-key-sep {
font-size: 0.78rem; font-size: 0.78rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
} }
.shortcut-desc { .shortcut-desc {
font-size: 0.875rem; font-size: 0.875rem;
color: var(--color-text); color: var(--fs-text-primary);
margin-left: 0.25rem; margin-left: 0.25rem;
} }
+13 -13
View File
@@ -89,19 +89,19 @@
* are universal across the family so a Save button looks identical in every * are universal across the family so a Save button looks identical in every
* app — the accent is identity, not action. */ * app — the accent is identity, not action. */
.btn-primary { .btn-primary {
background: var(--color-action-primary); background: var(--fs-action-primary);
color: var(--fs-text-on-action); color: var(--fs-text-on-action);
} }
.btn-primary:not(:disabled):hover { .btn-primary:not(:disabled):hover {
background: var(--color-action-primary-hover); background: var(--fs-action-primary-hover);
} }
.btn-secondary { .btn-secondary {
background: var(--color-action-secondary); background: var(--fs-action-secondary);
color: var(--fs-text-on-action); color: var(--fs-text-on-action);
} }
.btn-secondary:not(:disabled):hover { .btn-secondary:not(:disabled):hover {
background: var(--color-action-secondary-hover); background: var(--fs-action-secondary-hover);
} }
/* Ghost is an OUTLINE, which is why its border and the tertiary action colour /* Ghost is an OUTLINE, which is why its border and the tertiary action colour
@@ -112,21 +112,21 @@
.btn-ghost { .btn-ghost {
background: none; background: none;
border: var(--fs-border); border: var(--fs-border);
color: var(--color-text); color: var(--fs-text-primary);
} }
.btn-ghost:not(:disabled):hover { .btn-ghost:not(:disabled):hover {
border: var(--fs-border-hover); border: var(--fs-border-hover);
background: var(--color-hover); background: var(--fs-surface-hover);
} }
/* Destructive is NOT the error colour: an error is a failure that happened, a /* Destructive is NOT the error colour: an error is a failure that happened, a
* destructive action is one about to happen. Pair with an icon. */ * destructive action is one about to happen. Pair with an icon. */
.btn-danger { .btn-danger {
background: var(--color-action-destructive); background: var(--fs-action-destructive);
color: var(--fs-text-on-action); color: var(--fs-text-on-action);
} }
.btn-danger:not(:disabled):hover { .btn-danger:not(:disabled):hover {
background: var(--color-action-destructive-hover); background: var(--fs-action-destructive-hover);
} }
/* A bare text button: no fill, no border. The most common shape in the dense /* A bare text button: no fill, no border. The most common shape in the dense
@@ -136,7 +136,7 @@
.btn-text { .btn-text {
background: none; background: none;
border: none; border: none;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
padding: var(--fs-space-1) var(--fs-space-2); padding: var(--fs-space-1) var(--fs-space-2);
font-family: var(--fs-font-body); font-family: var(--fs-font-body);
font-size: var(--fs-size-tiny); font-size: var(--fs-size-tiny);
@@ -144,7 +144,7 @@
cursor: pointer; cursor: pointer;
transition: color var(--fs-dur-fast) var(--fs-ease); transition: color var(--fs-dur-fast) var(--fs-ease);
} }
.btn-text:not(:disabled):hover { color: var(--color-text); } .btn-text:not(:disabled):hover { color: var(--fs-text-primary); }
.btn-text:disabled { opacity: var(--fs-disabled-opacity); cursor: not-allowed; } .btn-text:disabled { opacity: var(--fs-disabled-opacity); cursor: not-allowed; }
.btn-text:focus-visible { outline: none; box-shadow: var(--fs-focus-ring); } .btn-text:focus-visible { outline: none; box-shadow: var(--fs-focus-ring); }
@@ -153,11 +153,11 @@
* a one-off: it is what a delete looks like when it must not shout. */ * a one-off: it is what a delete looks like when it must not shout. */
.btn-danger-outline { .btn-danger-outline {
background: none; background: none;
border: 1px solid var(--color-action-destructive); border: 1px solid var(--fs-action-destructive);
color: var(--color-action-destructive); color: var(--fs-action-destructive);
} }
.btn-danger-outline:not(:disabled):hover { .btn-danger-outline:not(:disabled):hover {
background: var(--color-action-destructive); background: var(--fs-action-destructive);
color: var(--fs-text-on-action); color: var(--fs-text-on-action);
} }
+86 -86
View File
@@ -13,7 +13,7 @@
flex-direction: column; flex-direction: column;
gap: 0.75rem; gap: 0.75rem;
padding: 1rem 1.5rem 0.5rem; padding: 1rem 1.5rem 0.5rem;
border-bottom: 1px solid var(--color-border); border-bottom: 1px solid var(--fs-border-color);
} }
.editor-body { .editor-body {
flex: 1; flex: 1;
@@ -41,36 +41,36 @@
with a Trash icon at the call site to reinforce intent. */ with a Trash icon at the call site to reinforce intent. */
.title-input:focus { .title-input:focus {
outline: none; outline: none;
border-bottom-color: var(--color-primary); border-bottom-color: var(--fs-accent);
} }
.title-input::placeholder { .title-input::placeholder {
color: var(--color-text-muted); color: var(--fs-text-tertiary);
font-weight: 400; font-weight: 400;
} }
.editor-tabs { .editor-tabs {
display: flex; display: flex;
gap: 0; gap: 0;
border-bottom: 1px solid var(--color-border); border-bottom: 1px solid var(--fs-border-color);
} }
.tab { .tab {
padding: 0.45rem 1rem; padding: 0.45rem 1rem;
border: none; border: none;
background: none; background: none;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
cursor: pointer; cursor: pointer;
font-size: 0.9rem; font-size: 0.9rem;
border-bottom: 2px solid transparent; border-bottom: 2px solid transparent;
} }
.tab.active { .tab.active {
color: var(--color-primary); color: var(--fs-accent);
border-bottom-color: var(--color-primary); border-bottom-color: var(--fs-accent);
} }
.preview-pane { .preview-pane {
padding: 0.75rem; padding: 0.75rem;
border: 1px solid var(--color-input-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
min-height: 200px; min-height: 200px;
background: var(--color-bg-card); background: var(--fs-surface-raised);
} }
/* ── Tag suggestions ── */ /* ── Tag suggestions ── */
@@ -85,21 +85,21 @@
align-items: center; align-items: center;
gap: 0.2rem; gap: 0.2rem;
padding: 0.2rem 0.55rem; padding: 0.2rem 0.55rem;
border: 1px solid var(--color-primary); border: 1px solid var(--fs-accent);
border-radius: 999px; border-radius: 999px;
background: transparent; background: transparent;
color: var(--color-primary); color: var(--fs-accent);
font-size: 0.8rem; font-size: 0.8rem;
cursor: pointer; cursor: pointer;
transition: background 0.15s, color 0.15s; transition: background 0.15s, color 0.15s;
} }
.tag-pill:hover:not(:disabled) { .tag-pill:hover:not(:disabled) {
background: var(--color-primary); background: var(--fs-accent);
color: var(--fs-text-on-action); color: var(--fs-text-on-action);
} }
.tag-pill.applied { .tag-pill.applied {
background: var(--color-success); background: var(--fs-success);
border-color: var(--color-success); border-color: var(--fs-success);
color: var(--fs-text-on-action); color: var(--fs-text-on-action);
cursor: default; cursor: default;
} }
@@ -111,8 +111,8 @@
.assist-panel { .assist-panel {
width: 320px; width: 320px;
flex-shrink: 0; flex-shrink: 0;
border-left: 1px solid var(--color-border); border-left: 1px solid var(--fs-border-color);
background: var(--color-bg-secondary); background: var(--fs-surface-raised);
display: flex; display: flex;
flex-direction: column; flex-direction: column;
overflow: hidden; overflow: hidden;
@@ -123,13 +123,13 @@
align-items: center; align-items: center;
gap: 0.5rem; gap: 0.5rem;
padding: 0.65rem 0.9rem; padding: 0.65rem 0.9rem;
border-bottom: 1px solid var(--color-border); border-bottom: 1px solid var(--fs-border-color);
} }
.assist-panel-title { .assist-panel-title {
flex: 1; flex: 1;
font-size: 0.8rem; font-size: 0.8rem;
font-weight: 500; font-weight: 500;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
text-transform: uppercase; text-transform: uppercase;
letter-spacing: 0.05em; letter-spacing: 0.05em;
} }
@@ -149,13 +149,13 @@
font-weight: 500; font-weight: 500;
text-transform: uppercase; text-transform: uppercase;
letter-spacing: 0.04em; letter-spacing: 0.04em;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
margin-bottom: 0.2rem; margin-bottom: 0.2rem;
} }
.assist-sections { .assist-sections {
border: 1px solid var(--color-input-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
background: var(--color-bg); background: var(--fs-surface-page);
max-height: 200px; max-height: 200px;
overflow-y: auto; overflow-y: auto;
flex-shrink: 0; flex-shrink: 0;
@@ -165,46 +165,46 @@
cursor: pointer; cursor: pointer;
font-size: 0.82rem; font-size: 0.82rem;
border-left: 3px solid transparent; border-left: 3px solid transparent;
color: var(--color-text); color: var(--fs-text-primary);
white-space: nowrap; white-space: nowrap;
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
} }
.assist-section-item:hover { .assist-section-item:hover {
background: var(--color-bg-secondary); background: var(--fs-surface-raised);
} }
.assist-section-item.selected { .assist-section-item.selected {
border-left-color: var(--color-primary); border-left-color: var(--fs-accent);
background: var(--color-bg-secondary); background: var(--fs-surface-raised);
font-weight: 500; font-weight: 500;
} }
.assist-empty, .assist-empty,
.assist-hint { .assist-hint {
padding: 0.6rem 0.7rem; padding: 0.6rem 0.7rem;
font-size: 0.82rem; font-size: 0.82rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
} }
.assist-target-preview { .assist-target-preview {
font-size: 0.8rem; font-size: 0.8rem;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
white-space: nowrap; white-space: nowrap;
} }
.assist-target-preview em { .assist-target-preview em {
font-style: normal; font-style: normal;
color: var(--color-text); color: var(--fs-text-primary);
} }
.assist-instruction { .assist-instruction {
width: 100%; width: 100%;
padding: 0.5rem 0.65rem; padding: 0.5rem 0.65rem;
border: 1px solid var(--color-input-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
font-size: 0.88rem; font-size: 0.88rem;
font-family: inherit; font-family: inherit;
resize: vertical; resize: vertical;
background: var(--color-bg); background: var(--fs-surface-page);
color: var(--color-text); color: var(--fs-text-primary);
box-sizing: border-box; box-sizing: border-box;
min-height: 3.5rem; min-height: 3.5rem;
} }
@@ -216,22 +216,22 @@
/* Streaming */ /* Streaming */
.assist-streaming-label { .assist-streaming-label {
font-size: 0.8rem; font-size: 0.8rem;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
white-space: nowrap; white-space: nowrap;
} }
.assist-preview-box { .assist-preview-box {
padding: 0.65rem; padding: 0.65rem;
border: 1px solid var(--color-input-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
background: var(--color-bg); background: var(--fs-surface-page);
font-size: 0.9rem; font-size: 0.9rem;
max-height: 300px; max-height: 300px;
overflow-y: auto; overflow-y: auto;
} }
.typing-indicator { .typing-indicator {
color: var(--color-text-muted); color: var(--fs-text-tertiary);
font-size: 0.75rem; font-size: 0.75rem;
letter-spacing: 0.15em; letter-spacing: 0.15em;
animation: blink 1s step-end infinite; animation: blink 1s step-end infinite;
@@ -244,18 +244,18 @@
.assist-active-hint { .assist-active-hint {
padding: 0.5rem 0.75rem; padding: 0.5rem 0.75rem;
font-size: 0.8rem; font-size: 0.8rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
text-align: center; text-align: center;
} }
/* Error */ /* Error */
.assist-error { .assist-error {
padding: 0.5rem 0.75rem; padding: 0.5rem 0.75rem;
background: color-mix(in srgb, var(--color-danger) 10%, transparent); background: color-mix(in srgb, var(--fs-error) 10%, transparent);
border: 1px solid var(--color-danger); border: 1px solid var(--fs-error);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
font-size: 0.85rem; font-size: 0.85rem;
color: var(--color-danger); color: var(--fs-error);
} }
/* Review / diff */ /* Review / diff */
@@ -265,12 +265,12 @@
justify-content: space-between; justify-content: space-between;
font-size: 0.8rem; font-size: 0.8rem;
font-weight: 500; font-weight: 500;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
} }
.diff-view { .diff-view {
border: 1px solid var(--color-input-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
background: var(--color-bg); background: var(--fs-surface-page);
font-size: 0.82rem; font-size: 0.82rem;
font-family: monospace; font-family: monospace;
max-height: 340px; max-height: 340px;
@@ -284,15 +284,15 @@
line-height: 1.5; line-height: 1.5;
} }
.diff-delete { .diff-delete {
background: color-mix(in srgb, var(--color-danger) 12%, transparent); background: color-mix(in srgb, var(--fs-error) 12%, transparent);
color: var(--color-danger); color: var(--fs-error);
} }
.diff-insert { .diff-insert {
background: color-mix(in srgb, var(--color-success) 12%, transparent); background: color-mix(in srgb, var(--fs-success) 12%, transparent);
color: var(--color-success); color: var(--fs-success);
} }
.diff-equal { .diff-equal {
color: var(--color-text-muted); color: var(--fs-text-tertiary);
} }
.diff-marker { .diff-marker {
flex-shrink: 0; flex-shrink: 0;
@@ -308,7 +308,7 @@
} }
.diff-empty { .diff-empty {
padding: 0.5rem; padding: 0.5rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
font-size: 0.82rem; font-size: 0.82rem;
} }
.assist-actions { .assist-actions {
@@ -320,15 +320,15 @@
.modal-overlay { .modal-overlay {
position: fixed; position: fixed;
inset: 0; inset: 0;
background: var(--color-overlay); background: var(--fs-overlay);
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
z-index: 200; z-index: 200;
} }
.modal-card { .modal-card {
background: var(--color-bg-card); background: var(--fs-surface-raised);
border-radius: var(--radius-md); border-radius: var(--fs-radius-lg);
padding: 1.5rem; padding: 1.5rem;
max-width: 400px; max-width: 400px;
width: 90%; width: 90%;
@@ -340,7 +340,7 @@
} }
.modal-message { .modal-message {
margin: 0 0 1.25rem; margin: 0 0 1.25rem;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
font-size: 0.95rem; font-size: 0.95rem;
} }
.modal-actions { .modal-actions {
@@ -350,17 +350,17 @@
} }
.modal-btn { .modal-btn {
padding: 0.45rem 1rem; padding: 0.45rem 1rem;
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
background: var(--color-bg-card); background: var(--fs-surface-raised);
color: var(--color-text); color: var(--fs-text-primary);
cursor: pointer; cursor: pointer;
font-size: 0.9rem; font-size: 0.9rem;
} }
.modal-btn-danger { .modal-btn-danger {
background: var(--color-danger); background: var(--fs-error);
color: var(--fs-text-on-action); color: var(--fs-text-on-action);
border-color: var(--color-danger); border-color: var(--fs-error);
} }
/* ── Floating inline assist button (teleported to body) ── */ /* ── Floating inline assist button (teleported to body) ── */
@@ -369,10 +369,10 @@
z-index: 100; z-index: 100;
transform: translateX(-50%); transform: translateX(-50%);
padding: 0.3rem 0.75rem; padding: 0.3rem 0.75rem;
background: var(--color-action-primary); background: var(--fs-action-primary);
color: var(--fs-text-on-action); color: var(--fs-text-on-action);
border: none; border: none;
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
cursor: pointer; cursor: pointer;
font-size: 0.8rem; font-size: 0.8rem;
box-shadow: 0 2px 8px var(--color-shadow); box-shadow: 0 2px 8px var(--color-shadow);
@@ -384,12 +384,12 @@
display: none; display: none;
width: 100%; width: 100%;
padding: 0.6rem 1rem; padding: 0.6rem 1rem;
background: var(--color-bg-secondary); background: var(--fs-surface-raised);
border: none; border: none;
border-bottom: 1px solid var(--color-border); border-bottom: 1px solid var(--fs-border-color);
font-size: 0.85rem; font-size: 0.85rem;
font-weight: 500; font-weight: 500;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
cursor: pointer; cursor: pointer;
text-align: left; text-align: left;
font-family: inherit; font-family: inherit;
@@ -408,7 +408,7 @@
.sb-label { .sb-label {
font-size: 0.78rem; font-size: 0.78rem;
font-weight: 500; font-weight: 500;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
text-transform: uppercase; text-transform: uppercase;
letter-spacing: 0.04em; letter-spacing: 0.04em;
} }
@@ -416,10 +416,10 @@
.sb-input { .sb-input {
width: 100%; width: 100%;
padding: 0.35rem 0.5rem; padding: 0.35rem 0.5rem;
border: 1px solid var(--color-input-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
background: var(--color-bg-card); background: var(--fs-surface-raised);
color: var(--color-text); color: var(--fs-text-primary);
font-size: 0.875rem; font-size: 0.875rem;
font-family: inherit; font-family: inherit;
box-sizing: border-box; box-sizing: border-box;
@@ -427,11 +427,11 @@
.sb-select:focus, .sb-select:focus,
.sb-input:focus { .sb-input:focus {
outline: none; outline: none;
border-color: var(--color-primary); border-color: var(--fs-accent);
} }
.sb-divider { .sb-divider {
height: 1px; height: 1px;
background: var(--color-border); background: var(--fs-border-color);
margin: 0.15rem 0; margin: 0.15rem 0;
} }
@media (max-width: 720px) { @media (max-width: 720px) {
@@ -452,8 +452,8 @@
width: auto; width: auto;
flex: 0 0 45%; flex: 0 0 45%;
border-left: none; border-left: none;
border-top: 1px solid var(--color-border); border-top: 1px solid var(--fs-border-color);
border-radius: var(--radius-md) var(--radius-md) 0 0; border-radius: var(--fs-radius-lg) var(--fs-radius-lg) 0 0;
} }
.editor-header { .editor-header {
padding: 0.75rem 1rem 0.5rem; padding: 0.75rem 1rem 0.5rem;
@@ -480,14 +480,14 @@
.btn-accept, .btn-accept,
.btn-generate, .btn-generate,
.btn-save { .btn-save {
background: var(--color-action-primary); background: var(--fs-action-primary);
color: var(--fs-text-on-action); color: var(--fs-text-on-action);
border: none; border: none;
} }
.btn-accept:not(:disabled):hover, .btn-accept:not(:disabled):hover,
.btn-generate:not(:disabled):hover, .btn-generate:not(:disabled):hover,
.btn-save:not(:disabled):hover { .btn-save:not(:disabled):hover {
background: var(--color-action-primary-hover); background: var(--fs-action-primary-hover);
} }
.btn-back, .btn-back,
@@ -497,7 +497,7 @@
.btn-suggest-tags { .btn-suggest-tags {
background: none; background: none;
border: var(--fs-border); border: var(--fs-border);
color: var(--color-text); color: var(--fs-text-primary);
} }
.btn-back:not(:disabled):hover, .btn-back:not(:disabled):hover,
.btn-clear:not(:disabled):hover, .btn-clear:not(:disabled):hover,
@@ -505,16 +505,16 @@
.btn-proofread:not(:disabled):hover, .btn-proofread:not(:disabled):hover,
.btn-suggest-tags:not(:disabled):hover { .btn-suggest-tags:not(:disabled):hover {
border: var(--fs-border-hover); border: var(--fs-border-hover);
background: var(--color-hover); background: var(--fs-surface-hover);
} }
.btn-delete { .btn-delete {
background: var(--color-action-destructive); background: var(--fs-action-destructive);
color: var(--fs-text-on-action); color: var(--fs-text-on-action);
border: none; border: none;
} }
.btn-delete:not(:disabled):hover { .btn-delete:not(:disabled):hover {
background: var(--color-action-destructive-hover); background: var(--fs-action-destructive-hover);
} }
/* Shared geometry for every alias above. */ /* Shared geometry for every alias above. */
@@ -541,12 +541,12 @@
.btn-dismiss-tags { .btn-dismiss-tags {
background: none; background: none;
border: none; border: none;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
padding: 2px var(--fs-space-1); padding: 2px var(--fs-space-1);
font-size: var(--fs-size-tiny); font-size: var(--fs-size-tiny);
line-height: 1; line-height: 1;
} }
.btn-dismiss-tags:hover { color: var(--color-text); } .btn-dismiss-tags:hover { color: var(--fs-text-primary); }
.btn-accept:disabled, .btn-generate:disabled, .btn-save:disabled, .btn-accept:disabled, .btn-generate:disabled, .btn-save:disabled,
.btn-back:disabled, .btn-clear:disabled, .btn-reject:disabled, .btn-back:disabled, .btn-clear:disabled, .btn-reject:disabled,
+24 -24
View File
@@ -41,8 +41,8 @@
} }
.prose pre { .prose pre {
background: var(--color-code-bg); background: var(--fs-surface-code);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: 6px; border-radius: 6px;
padding: 0.75rem; padding: 0.75rem;
overflow-x: auto; overflow-x: auto;
@@ -57,7 +57,7 @@
} }
.prose code { .prose code {
background: var(--color-code-inline-bg); background: var(--fs-surface-code-inline);
border-radius: 3px; border-radius: 3px;
padding: 0.15rem 0.35rem; padding: 0.15rem 0.35rem;
font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas,
@@ -73,25 +73,25 @@
.prose th, .prose th,
.prose td { .prose td {
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
padding: 0.4rem 0.6rem; padding: 0.4rem 0.6rem;
text-align: left; text-align: left;
} }
.prose thead th { .prose thead th {
background: var(--color-bg-secondary); background: var(--fs-surface-raised);
font-weight: 600; font-weight: 600;
} }
.prose tbody tr:nth-child(even) { .prose tbody tr:nth-child(even) {
background: var(--color-table-stripe); background: var(--fs-table-stripe);
} }
.prose blockquote { .prose blockquote {
border-left: 3px solid var(--color-border); border-left: 3px solid var(--fs-border-color);
margin: 0 0 0.6rem; margin: 0 0 0.6rem;
padding: 0.25rem 0 0.25rem 0.75rem; padding: 0.25rem 0 0.25rem 0.75rem;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
} }
.prose blockquote p:last-child { .prose blockquote p:last-child {
@@ -100,7 +100,7 @@
.prose hr { .prose hr {
border: none; border: none;
border-top: 1px solid var(--color-border); border-top: 1px solid var(--fs-border-color);
margin: 1rem 0; margin: 1rem 0;
} }
@@ -110,7 +110,7 @@
} }
.prose a { .prose a {
color: var(--color-primary); color: var(--fs-accent);
text-decoration: none; text-decoration: none;
} }
@@ -119,8 +119,8 @@
} }
.prose .inline-tag { .prose .inline-tag {
color: var(--color-tag-text); color: var(--fs-accent);
background: var(--color-tag-bg); background: var(--fs-accent-soft);
padding: 0.1rem 0.35rem; padding: 0.1rem 0.35rem;
border-radius: 4px; border-radius: 4px;
text-decoration: none; text-decoration: none;
@@ -133,8 +133,8 @@
} }
.prose .wikilink { .prose .wikilink {
color: var(--color-wikilink); color: var(--fs-wikilink);
background: var(--color-wikilink-bg); background: var(--fs-accent-soft);
padding: 0.1rem 0.35rem; padding: 0.1rem 0.35rem;
border-radius: 4px; border-radius: 4px;
text-decoration: none; text-decoration: none;
@@ -168,7 +168,7 @@
.prose ul[data-type="taskList"] li > label input[type="checkbox"] { .prose ul[data-type="taskList"] li > label input[type="checkbox"] {
cursor: pointer; cursor: pointer;
accent-color: var(--color-primary); accent-color: var(--fs-accent);
width: 0.95em; width: 0.95em;
height: 0.95em; height: 0.95em;
margin: 0; margin: 0;
@@ -180,7 +180,7 @@
.prose ul[data-type="taskList"] li[data-checked="true"] > div { .prose ul[data-type="taskList"] li[data-checked="true"] > div {
text-decoration: line-through; text-decoration: line-through;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
} }
/* Interactive checkboxes — marked output in the list-note viewer */ /* Interactive checkboxes — marked output in the list-note viewer */
@@ -196,7 +196,7 @@
} }
.prose--checklist li input[type="checkbox"] { .prose--checklist li input[type="checkbox"] {
flex-shrink: 0; flex-shrink: 0;
accent-color: var(--color-primary); accent-color: var(--fs-accent);
cursor: pointer; cursor: pointer;
width: 0.95em; width: 0.95em;
height: 0.95em; height: 0.95em;
@@ -205,7 +205,7 @@
.prose--checklist li:has(input[type="checkbox"]:checked) > p, .prose--checklist li:has(input[type="checkbox"]:checked) > p,
.prose--checklist li:has(input[type="checkbox"]:checked) { .prose--checklist li:has(input[type="checkbox"]:checked) {
text-decoration: line-through; text-decoration: line-through;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
} }
.prose--checklist li:has(input[type="checkbox"]:checked) input[type="checkbox"] { .prose--checklist li:has(input[type="checkbox"]:checked) input[type="checkbox"] {
text-decoration: none; /* don't strike through the checkbox itself */ text-decoration: none; /* don't strike through the checkbox itself */
@@ -219,7 +219,7 @@
} }
.tiptap-editor .ProseMirror p.is-editor-empty:first-child::before { .tiptap-editor .ProseMirror p.is-editor-empty:first-child::before {
color: var(--color-text-muted); color: var(--fs-text-tertiary);
content: attr(data-placeholder); content: attr(data-placeholder);
float: left; float: left;
height: 0; height: 0;
@@ -227,12 +227,12 @@
} }
.tiptap-wrapper { .tiptap-wrapper {
border: 1px solid var(--color-input-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
background: var(--color-bg-card); background: var(--fs-surface-raised);
color: var(--color-text); color: var(--fs-text-primary);
} }
.tiptap-wrapper:focus-within { .tiptap-wrapper:focus-within {
box-shadow: var(--focus-ring); box-shadow: var(--fs-focus-ring);
} }
+11 -116
View File
@@ -188,126 +188,21 @@
*/ */
/* ========================================================================== /* ==========================================================================
COMPATIBILITY ALIASES — the app's historical names, pointing at the system. The compatibility-alias block that lived here is GONE (#2533). It let ~55
components keep their historical --color-* names while theme.css was
These exist so ~55 components keep working while they migrate to --fs-* repointed at the design system; the rename sweep it promised ran on
one at a time. Every one is a plain var() reference, which is what lets this 2026-08-08 and every component now references --fs-* directly. Do not
block be declared ONCE: when [data-theme="light"] moves --fs-surface-page, reintroduce app-local alias names — the design system's tokens are the
--color-bg follows, because the alias resolves at use time. vocabulary, and check_snippets_against_design_system can only see through
names the system actually declares.
That is why this file lost 48 of its 60 dark-mode overrides — they were all
restating relationships the aliases now express directly.
Removing this block is a rename sweep across the components, tracked
separately. Nothing new should reference a --color-* name.
========================================================================== */ ========================================================================== */
:root { :root {
/* surfaces */ /* A VALUE, not an alias — the one survivor of the alias block. The design
--color-bg: var(--fs-surface-page); system has no shadow-colour token yet, so this is a recorded gap: when a
--color-bg-secondary: var(--fs-surface-raised); second app needs it, promote it to an --fs-* token in the system and
--color-bg-card: var(--fs-surface-raised); regenerate, rather than copying this line. */
--color-surface: var(--fs-surface-hover);
--color-code-bg: var(--fs-surface-code);
--color-code-inline-bg: var(--fs-surface-code-inline);
--color-table-stripe: var(--fs-table-stripe);
--color-overlay: var(--fs-overlay);
/* text */
--color-text: var(--fs-text-primary);
--color-text-secondary: var(--fs-text-secondary);
--color-text-muted: var(--fs-text-tertiary);
/* lines */
--color-border: var(--fs-border-color);
--color-input-border: var(--fs-border-color);
--focus-ring: var(--fs-focus-ring);
/* brand */
--color-primary: var(--fs-accent);
--color-primary-solid: var(--fs-accent);
--color-primary-deep: var(--fs-accent-deep);
--color-primary-faint: var(--fs-accent-faint);
--color-primary-tint: var(--fs-accent-soft);
--color-primary-wash: var(--fs-accent-wash);
--color-tag-bg: var(--fs-accent-soft);
--color-tag-text: var(--fs-accent);
--color-wikilink: var(--fs-wikilink);
--color-wikilink-bg: var(--fs-accent-soft);
--gradient-cta: var(--fs-gradient-cta);
--glow-cta: var(--fs-glow-cta);
--glow-cta-hover: var(--fs-glow-cta-hover);
/* actions */
--color-action-primary: var(--fs-action-primary);
--color-action-primary-hover: var(--fs-action-primary-hover);
--color-action-secondary: var(--fs-action-secondary);
--color-action-secondary-hover: var(--fs-action-secondary-hover);
--color-action-destructive: var(--fs-action-destructive);
--color-action-destructive-hover: var(--fs-action-destructive-hover);
/* semantic */
--color-success: var(--fs-success);
--color-warning: var(--fs-warning);
--color-danger: var(--fs-error);
--color-overdue: var(--fs-overdue);
--color-toast-success: var(--fs-success);
--color-toast-error: var(--fs-error);
--color-shadow: rgba(0, 0, 0, 0.4); --color-shadow: rgba(0, 0, 0, 0.4);
/* task status + priority */
--color-status-todo: var(--fs-status-todo);
--color-status-todo-bg: var(--fs-status-todo-bg);
--color-status-in-progress: var(--fs-status-in-progress);
--color-status-in-progress-bg: var(--fs-status-in-progress-bg);
--color-status-done: var(--fs-status-done);
--color-status-done-bg: var(--fs-status-done-bg);
--color-priority-low: var(--fs-priority-low);
--color-priority-low-bg: var(--fs-priority-low-bg);
--color-priority-medium: var(--fs-priority-medium);
--color-priority-medium-bg: var(--fs-priority-medium-bg);
--color-priority-high: var(--fs-priority-high);
--color-priority-high-bg: var(--fs-priority-high-bg);
/* geometry */
--radius-sm: var(--fs-radius-sm);
--radius-md: var(--fs-radius-lg); /* NB: the app's "md" is the system's LARGE */
--radius-lg: var(--fs-radius-xl); /* and the app's "lg" is the system's XL */
--page-max-width: var(--fs-layout-page-max);
--page-padding-x: var(--fs-layout-page-pad);
--sidebar-width: var(--fs-layout-sidebar);
--header-height: var(--fs-layout-header);
/* ------------------------------------------------------------------
Names components reference that were NEVER declared anywhere.
Each of these was reached for with a hardcoded fallback, so the page
rendered — but the fallback was what rendered, always, and several were
off-palette: --color-primary-bg fell back to an indigo, --color-destructive
to a brick that is not the oxblood, --color-status-cancelled to a grey from
no palette in this system.
Wiring them to real tokens is the whole point of the exercise. Expect small
visual shifts exactly where a fallback had drifted; that shift IS the fix.
------------------------------------------------------------------ */
--color-accent: var(--fs-accent);
/* Foreground ON the accent, so it follows the accent's mode-independence,
not the page text's. Pointing this at --fs-text-primary made it invert to
obsidian on light — over a mid-tone accent, well under the AA floor. */
--color-accent-fg: var(--fs-text-on-action);
--color-hover: var(--fs-surface-hover);
--color-bg-hover: var(--fs-surface-hover);
--color-bg-tertiary: var(--fs-surface-hover);
--color-surface-2: var(--fs-surface-hover);
--color-surface-alt: var(--fs-surface-hover);
--color-surface-raised: var(--fs-surface-raised);
--color-input-bg: var(--fs-surface-page);
--color-muted: var(--fs-text-tertiary);
--color-destructive: var(--fs-destructive);
--color-primary-bg: var(--fs-accent-soft);
--color-status-cancelled: var(--fs-status-cancelled);
--font-display: var(--fs-font-display);
--font-mono: var(--fs-font-mono);
} }
/* ========================================================================== /* ==========================================================================
+12 -12
View File
@@ -15,27 +15,27 @@
white-space: nowrap; white-space: nowrap;
} }
.ctx-crumb-parent { .ctx-crumb-parent {
color: var(--color-text-muted); color: var(--fs-text-tertiary);
background: var(--color-bg-secondary); background: var(--fs-surface-raised);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
text-decoration: none; text-decoration: none;
} }
.ctx-crumb-parent:hover { .ctx-crumb-parent:hover {
color: var(--color-primary); color: var(--fs-accent);
border-color: var(--color-primary); border-color: var(--fs-accent);
} }
.ctx-crumb-project { .ctx-crumb-project {
color: var(--color-primary); color: var(--fs-accent);
background: color-mix(in srgb, var(--color-primary) 10%, transparent); background: color-mix(in srgb, var(--fs-accent) 10%, transparent);
border: 1px solid color-mix(in srgb, var(--color-primary) 30%, transparent); border: 1px solid color-mix(in srgb, var(--fs-accent) 30%, transparent);
text-decoration: none; text-decoration: none;
font-weight: 500; font-weight: 500;
} }
.ctx-crumb-project:hover { .ctx-crumb-project:hover {
background: color-mix(in srgb, var(--color-primary) 18%, transparent); background: color-mix(in srgb, var(--fs-accent) 18%, transparent);
} }
.ctx-crumb-milestone { .ctx-crumb-milestone {
color: var(--color-text-secondary); color: var(--fs-text-secondary);
background: var(--color-bg-secondary); background: var(--fs-surface-raised);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
} }
+33 -33
View File
@@ -124,8 +124,8 @@ router.afterEach(() => {
<style scoped> <style scoped>
.app-header { .app-header {
background: linear-gradient(180deg, var(--color-surface), var(--color-bg)); background: linear-gradient(180deg, var(--fs-surface-hover), var(--fs-surface-page));
border-bottom: 1px solid color-mix(in srgb, var(--color-primary) 18%, transparent); border-bottom: 1px solid color-mix(in srgb, var(--fs-accent) 18%, transparent);
position: relative; position: relative;
} }
/* Three tracks, not a flex row with an absolutely-centred overlay. /* Three tracks, not a flex row with an absolutely-centred overlay.
@@ -178,7 +178,7 @@ router.afterEach(() => {
display: flex; display: flex;
align-items: center; align-items: center;
gap: 2px; gap: 2px;
background: var(--color-primary-faint); background: var(--fs-accent-faint);
border-radius: 10px; border-radius: 10px;
padding: 3px; padding: 3px;
} }
@@ -194,7 +194,7 @@ router.afterEach(() => {
} }
.nav-link { .nav-link {
color: var(--color-text-secondary); color: var(--fs-text-secondary);
text-decoration: none; text-decoration: none;
font-size: 0.82rem; font-size: 0.82rem;
padding: 0.3rem 0.75rem; padding: 0.3rem 0.75rem;
@@ -202,14 +202,14 @@ router.afterEach(() => {
transition: background 0.15s, color 0.15s; transition: background 0.15s, color 0.15s;
} }
.nav-link:hover { .nav-link:hover {
color: var(--color-text); color: var(--fs-text-primary);
background: var(--color-primary-tint); background: var(--fs-accent-soft);
} }
.nav-link.router-link-active { .nav-link.router-link-active {
color: var(--color-primary-solid); color: var(--fs-accent);
font-weight: 500; font-weight: 500;
background: color-mix(in srgb, var(--color-primary) 25%, transparent); background: color-mix(in srgb, var(--fs-accent) 25%, transparent);
box-shadow: 0 0 16px color-mix(in srgb, var(--color-primary) 30%, transparent); box-shadow: 0 0 16px color-mix(in srgb, var(--fs-accent) 30%, transparent);
} }
/* Status indicator */ /* Status indicator */
@@ -229,7 +229,7 @@ router.afterEach(() => {
.status-text { .status-text {
font-size: 0.75rem; font-size: 0.75rem;
font-weight: 500; font-weight: 500;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
} }
/* Status dots are indicator lights, not semantic-palette buttons — /* Status dots are indicator lights, not semantic-palette buttons —
they want to read as vital (Moss/Warning/Error are too muted for they want to read as vital (Moss/Warning/Error are too muted for
@@ -239,7 +239,7 @@ router.afterEach(() => {
.status-yellow .status-dot { background: #facc15; animation: pulse-dot 2s infinite; } .status-yellow .status-dot { background: #facc15; animation: pulse-dot 2s infinite; }
.status-orange .status-dot { background: #f97316; } .status-orange .status-dot { background: #f97316; }
.status-red .status-dot { background: #ef4444; } .status-red .status-dot { background: #ef4444; }
.status-gray .status-dot { background: var(--color-text-muted); animation: pulse-dot 2s infinite; } .status-gray .status-dot { background: var(--fs-text-tertiary); animation: pulse-dot 2s infinite; }
@keyframes pulse-dot { @keyframes pulse-dot {
0%, 100% { opacity: 1; } 0%, 100% { opacity: 1; }
50% { opacity: 0.3; } 50% { opacity: 0.3; }
@@ -252,12 +252,12 @@ router.afterEach(() => {
/* Icon buttons (?, theme, gear) */ /* Icon buttons (?, theme, gear) */
.btn-icon { .btn-icon {
background: none; background: none;
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
padding: 0.25rem 0.45rem; padding: 0.25rem 0.45rem;
cursor: pointer; cursor: pointer;
font-size: 0.95rem; font-size: 0.95rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
line-height: 1; line-height: 1;
display: flex; display: flex;
align-items: center; align-items: center;
@@ -265,9 +265,9 @@ router.afterEach(() => {
} }
.btn-icon:hover, .btn-icon:hover,
.btn-icon.active { .btn-icon.active {
background: var(--color-bg-card); background: var(--fs-surface-raised);
color: var(--color-text); color: var(--fs-text-primary);
border-color: var(--color-primary); border-color: var(--fs-accent);
} }
/* User info */ /* User info */
@@ -277,11 +277,11 @@ router.afterEach(() => {
gap: 0.4rem; gap: 0.4rem;
margin-left: 0.25rem; margin-left: 0.25rem;
padding-left: 0.5rem; padding-left: 0.5rem;
border-left: 1px solid var(--color-border); border-left: 1px solid var(--fs-border-color);
} }
.username { .username {
font-size: 0.85rem; font-size: 0.85rem;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
font-weight: 500; font-weight: 500;
/* The widest thing on the right and the only one that can give: a long /* The widest thing on the right and the only one that can give: a long
username shouldn't be what decides where the nav bar sits. */ username shouldn't be what decides where the nav bar sits. */
@@ -295,24 +295,24 @@ router.afterEach(() => {
font-weight: 500; font-weight: 500;
text-transform: uppercase; text-transform: uppercase;
letter-spacing: 0.05em; letter-spacing: 0.05em;
color: var(--color-primary); color: var(--fs-accent);
background: color-mix(in srgb, var(--color-primary) 15%, transparent); background: color-mix(in srgb, var(--fs-accent) 15%, transparent);
padding: 0.1rem 0.35rem; padding: 0.1rem 0.35rem;
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
} }
.btn-logout { .btn-logout {
background: none; background: none;
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
padding: 0.2rem 0.5rem; padding: 0.2rem 0.5rem;
cursor: pointer; cursor: pointer;
font-size: 0.8rem; font-size: 0.8rem;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
font-family: inherit; font-family: inherit;
} }
.btn-logout:hover { .btn-logout:hover {
color: var(--color-danger); color: var(--fs-error);
border-color: var(--color-danger); border-color: var(--fs-error);
} }
/* Hamburger — mobile only */ /* Hamburger — mobile only */
@@ -330,7 +330,7 @@ router.afterEach(() => {
display: block; display: block;
width: 20px; width: 20px;
height: 2px; height: 2px;
background: var(--color-text); background: var(--fs-text-primary);
border-radius: 1px; border-radius: 1px;
} }
@@ -339,13 +339,13 @@ router.afterEach(() => {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
padding: 0.5rem 1rem 0.75rem; padding: 0.5rem 1rem 0.75rem;
border-top: 1px solid var(--color-border); border-top: 1px solid var(--fs-border-color);
background: var(--color-bg-secondary); background: var(--fs-surface-raised);
gap: 0.1rem; gap: 0.1rem;
} }
.mobile-divider { .mobile-divider {
height: 1px; height: 1px;
background: var(--color-border); background: var(--fs-border-color);
margin: 0.4rem 0; margin: 0.4rem 0;
} }
.mobile-actions { .mobile-actions {
@@ -359,7 +359,7 @@ router.afterEach(() => {
align-items: center; align-items: center;
gap: 0.5rem; gap: 0.5rem;
padding-top: 0.4rem; padding-top: 0.4rem;
border-top: 1px solid var(--color-border); border-top: 1px solid var(--fs-border-color);
margin-top: 0.25rem; margin-top: 0.25rem;
} }
@@ -398,7 +398,7 @@ router.afterEach(() => {
border-radius: 8px; border-radius: 8px;
} }
.mobile-menu .nav-link.router-link-active { .mobile-menu .nav-link.router-link-active {
background: var(--color-primary-wash); background: var(--fs-accent-wash);
box-shadow: none; box-shadow: none;
} }
.mobile-user .btn-logout { .mobile-user .btn-logout {
+5 -5
View File
@@ -13,8 +13,8 @@ defineProps<{ size?: number }>();
> >
<defs> <defs>
<linearGradient id="logo-gradient" x1="0" y1="0" x2="1" y2="1"> <linearGradient id="logo-gradient" x1="0" y1="0" x2="1" y2="1">
<stop offset="0%" stop-color="var(--color-primary-solid)" /> <stop offset="0%" stop-color="var(--fs-accent)" />
<stop offset="100%" stop-color="var(--color-primary-deep)" /> <stop offset="100%" stop-color="var(--fs-accent-deep)" />
</linearGradient> </linearGradient>
</defs> </defs>
<!-- Book body --> <!-- Book body -->
@@ -44,12 +44,12 @@ defineProps<{ size?: number }>();
<style scoped> <style scoped>
.logo-book { .logo-book {
fill: url(#logo-gradient); fill: url(#logo-gradient);
stroke: color-mix(in srgb, var(--color-primary) 70%, transparent); stroke: color-mix(in srgb, var(--fs-accent) 70%, transparent);
} }
.logo-spine { .logo-spine {
stroke: var(--color-text-secondary); stroke: var(--fs-text-secondary);
} }
.logo-lines { .logo-lines {
stroke: var(--color-text-muted); stroke: var(--fs-text-tertiary);
} }
</style> </style>
+16 -16
View File
@@ -90,9 +90,9 @@ function markerFor(type: DiffLine['type']): string {
flex-direction: column; flex-direction: column;
flex: 1; flex: 1;
min-height: 0; min-height: 0;
border: 1px solid var(--color-input-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
background: var(--color-bg); background: var(--fs-surface-page);
overflow: hidden; overflow: hidden;
} }
@@ -103,15 +103,15 @@ function markerFor(type: DiffLine['type']): string {
display: flex; display: flex;
gap: 1rem; gap: 1rem;
padding: 0.4rem 0.75rem; padding: 0.4rem 0.75rem;
background: var(--color-bg-secondary); background: var(--fs-surface-raised);
border-bottom: 1px solid var(--color-border); border-bottom: 1px solid var(--fs-border-color);
font-size: 0.78rem; font-size: 0.78rem;
font-family: monospace; font-family: monospace;
font-weight: 600; font-weight: 600;
} }
.diff-summary-ins { color: var(--color-success); } .diff-summary-ins { color: var(--fs-success); }
.diff-summary-del { color: var(--color-danger); } .diff-summary-del { color: var(--fs-error); }
.diff-scroll { .diff-scroll {
flex: 1; flex: 1;
@@ -123,7 +123,7 @@ function markerFor(type: DiffLine['type']): string {
.diff-empty { .diff-empty {
padding: 0.75rem; padding: 0.75rem;
font-size: 0.85rem; font-size: 0.85rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
} }
.diff-line { .diff-line {
@@ -136,24 +136,24 @@ function markerFor(type: DiffLine['type']): string {
} }
.diff-delete { .diff-delete {
background: color-mix(in srgb, var(--color-danger) 12%, transparent); background: color-mix(in srgb, var(--fs-error) 12%, transparent);
color: var(--color-danger); color: var(--fs-error);
} }
.diff-insert { .diff-insert {
background: color-mix(in srgb, var(--color-success) 12%, transparent); background: color-mix(in srgb, var(--fs-success) 12%, transparent);
color: var(--color-success); color: var(--fs-success);
} }
.diff-equal { .diff-equal {
color: var(--color-text-muted); color: var(--fs-text-tertiary);
} }
.diff-collapse { .diff-collapse {
color: var(--color-text-muted); color: var(--fs-text-tertiary);
opacity: 0.6; opacity: 0.6;
border-top: 1px dashed var(--color-border); border-top: 1px dashed var(--fs-border-color);
border-bottom: 1px dashed var(--color-border); border-bottom: 1px dashed var(--fs-border-color);
padding-top: 0.2rem; padding-top: 0.2rem;
padding-bottom: 0.2rem; padding-bottom: 0.2rem;
} }
+26 -26
View File
@@ -309,7 +309,7 @@ onMounted(loadVersions);
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
padding: 0.9rem 1.25rem; padding: 0.9rem 1.25rem;
border-bottom: 1px solid var(--color-border); border-bottom: 1px solid var(--fs-border-color);
} }
.history-title { .history-title {
@@ -322,11 +322,11 @@ onMounted(loadVersions);
border: none; border: none;
font-size: 1.25rem; font-size: 1.25rem;
cursor: pointer; cursor: pointer;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
line-height: 1; line-height: 1;
padding: 0.1rem 0.3rem; padding: 0.1rem 0.3rem;
} }
.history-close:hover { color: var(--color-text); } .history-close:hover { color: var(--fs-text-primary); }
.history-body { .history-body {
flex: 1; flex: 1;
@@ -338,7 +338,7 @@ onMounted(loadVersions);
.history-list { .history-list {
width: 220px; width: 220px;
flex-shrink: 0; flex-shrink: 0;
border-right: 1px solid var(--color-border); border-right: 1px solid var(--fs-border-color);
overflow-y: auto; overflow-y: auto;
} }
@@ -346,18 +346,18 @@ onMounted(loadVersions);
padding: 0.6rem 0.9rem; padding: 0.6rem 0.9rem;
cursor: pointer; cursor: pointer;
border-left: 3px solid transparent; border-left: 3px solid transparent;
border-bottom: 1px solid var(--color-border); border-bottom: 1px solid var(--fs-border-color);
} }
.history-item:hover { background: var(--color-bg-secondary); } .history-item:hover { background: var(--fs-surface-raised); }
.history-item.selected { .history-item.selected {
border-left-color: var(--color-primary); border-left-color: var(--fs-accent);
background: var(--color-bg-secondary); background: var(--fs-surface-raised);
} }
.history-item-title { .history-item-title {
font-size: 0.85rem; font-size: 0.85rem;
font-weight: 500; font-weight: 500;
color: var(--color-text); color: var(--fs-text-primary);
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
white-space: nowrap; white-space: nowrap;
@@ -365,7 +365,7 @@ onMounted(loadVersions);
.history-item-date { .history-item-date {
font-size: 0.75rem; font-size: 0.75rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
margin-top: 0.15rem; margin-top: 0.15rem;
} }
@@ -381,7 +381,7 @@ onMounted(loadVersions);
.history-empty { .history-empty {
padding: 1rem; padding: 1rem;
font-size: 0.85rem; font-size: 0.85rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
} }
.history-footer { .history-footer {
@@ -390,7 +390,7 @@ onMounted(loadVersions);
gap: 0.5rem; gap: 0.5rem;
justify-content: flex-end; justify-content: flex-end;
padding: 0.75rem 1.25rem; padding: 0.75rem 1.25rem;
border-top: 1px solid var(--color-border); border-top: 1px solid var(--fs-border-color);
} }
@@ -403,12 +403,12 @@ onMounted(loadVersions);
font-size: 0.85em; font-size: 0.85em;
line-height: 1; line-height: 1;
} }
.pin-badge-manual { color: var(--color-primary); } .pin-badge-manual { color: var(--fs-accent); }
.pin-badge-auto { color: var(--color-text-muted); } .pin-badge-auto { color: var(--fs-text-tertiary); }
.history-item-label { .history-item-label {
font-size: 0.72rem; font-size: 0.72rem;
color: var(--color-primary); color: var(--fs-accent);
font-style: italic; font-style: italic;
margin-top: 0.15rem; margin-top: 0.15rem;
overflow: hidden; overflow: hidden;
@@ -419,7 +419,7 @@ onMounted(loadVersions);
/* ── Pin controls above the diff ────────────────────────────────────────── */ /* ── Pin controls above the diff ────────────────────────────────────────── */
.version-pin-controls { .version-pin-controls {
padding: 0.4rem 0.5rem 0.5rem; padding: 0.4rem 0.5rem 0.5rem;
border-bottom: 1px solid var(--color-border); border-bottom: 1px solid var(--fs-border-color);
font-size: 0.82rem; font-size: 0.82rem;
} }
.pin-actions { .pin-actions {
@@ -430,7 +430,7 @@ onMounted(loadVersions);
} }
.pin-state { .pin-state {
font-style: italic; font-style: italic;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
flex: 1; flex: 1;
min-width: 0; min-width: 0;
overflow: hidden; overflow: hidden;
@@ -442,13 +442,13 @@ onMounted(loadVersions);
font-size: 0.78rem; font-size: 0.78rem;
background: transparent; background: transparent;
color: inherit; color: inherit;
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: 999px; border-radius: 999px;
cursor: pointer; cursor: pointer;
} }
.btn-pin:hover:not(:disabled), .btn-pin-edit:hover:not(:disabled) { .btn-pin:hover:not(:disabled), .btn-pin-edit:hover:not(:disabled) {
background: rgba(99, 102, 241, 0.12); background: rgba(99, 102, 241, 0.12);
border-color: var(--color-primary); border-color: var(--fs-accent);
} }
.btn-unpin:hover:not(:disabled) { .btn-unpin:hover:not(:disabled) {
background: rgba(239, 68, 68, 0.10); background: rgba(239, 68, 68, 0.10);
@@ -463,27 +463,27 @@ onMounted(loadVersions);
flex: 1; flex: 1;
padding: 0.3rem 0.5rem; padding: 0.3rem 0.5rem;
font-size: 0.85rem; font-size: 0.85rem;
background: var(--color-input-bg); background: var(--fs-surface-page);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
color: inherit; color: inherit;
} }
.pin-label-input:focus { .pin-label-input:focus {
outline: none; outline: none;
border-color: var(--color-primary); border-color: var(--fs-accent);
} }
.btn-pin-save, .btn-pin-cancel { .btn-pin-save, .btn-pin-cancel {
padding: 0.3rem 0.7rem; padding: 0.3rem 0.7rem;
font-size: 0.78rem; font-size: 0.78rem;
background: transparent; background: transparent;
color: inherit; color: inherit;
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
cursor: pointer; cursor: pointer;
} }
.btn-pin-save:hover:not(:disabled) { .btn-pin-save:hover:not(:disabled) {
background: rgba(99, 102, 241, 0.12); background: rgba(99, 102, 241, 0.12);
border-color: var(--color-primary); border-color: var(--fs-accent);
} }
.btn-pin-save:disabled, .btn-pin-cancel:disabled, .btn-pin-save:disabled, .btn-pin-cancel:disabled,
.btn-pin:disabled, .btn-pin-edit:disabled, .btn-unpin:disabled { .btn-pin:disabled, .btn-pin-edit:disabled, .btn-unpin:disabled {
+34 -34
View File
@@ -74,11 +74,11 @@ const markers: Record<DiffLine["type"], string> = {
<style scoped> <style scoped>
.iap { .iap {
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
margin-bottom: 0.75rem; margin-bottom: 0.75rem;
overflow: hidden; overflow: hidden;
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
background: var(--color-bg); background: var(--fs-surface-page);
} }
/* ── Header ── */ /* ── Header ── */
@@ -88,16 +88,16 @@ const markers: Record<DiffLine["type"], string> = {
gap: 0.5rem; gap: 0.5rem;
padding: 0.45rem 0.75rem; padding: 0.45rem 0.75rem;
font-size: 0.85rem; font-size: 0.85rem;
border-bottom: 1px solid var(--color-border); border-bottom: 1px solid var(--fs-border-color);
background: var(--color-bg-secondary); background: var(--fs-surface-raised);
} }
/* ── Streaming ── */ /* ── Streaming ── */
.iap-streaming { .iap-streaming {
border-color: var(--color-primary); border-color: var(--fs-accent);
} }
.iap-streaming .iap-header { .iap-streaming .iap-header {
background: color-mix(in srgb, var(--color-primary) 8%, var(--color-bg-secondary)); background: color-mix(in srgb, var(--fs-accent) 8%, var(--fs-surface-raised));
} }
.iap-pulse { .iap-pulse {
@@ -105,7 +105,7 @@ const markers: Record<DiffLine["type"], string> = {
width: 8px; width: 8px;
height: 8px; height: 8px;
border-radius: 50%; border-radius: 50%;
background: var(--color-primary); background: var(--fs-accent);
flex-shrink: 0; flex-shrink: 0;
animation: iap-pulse 1.2s ease-in-out infinite; animation: iap-pulse 1.2s ease-in-out infinite;
} }
@@ -117,7 +117,7 @@ const markers: Record<DiffLine["type"], string> = {
.iap-label { .iap-label {
flex: 1; flex: 1;
font-weight: 500; font-weight: 500;
color: var(--color-text); color: var(--fs-text-primary);
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
white-space: nowrap; white-space: nowrap;
@@ -125,9 +125,9 @@ const markers: Record<DiffLine["type"], string> = {
.iap-btn-cancel { .iap-btn-cancel {
background: none; background: none;
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
color: var(--color-text-secondary); color: var(--fs-text-secondary);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
padding: 0.15rem 0.5rem; padding: 0.15rem 0.5rem;
cursor: pointer; cursor: pointer;
font-size: 0.8rem; font-size: 0.8rem;
@@ -135,8 +135,8 @@ const markers: Record<DiffLine["type"], string> = {
flex-shrink: 0; flex-shrink: 0;
} }
.iap-btn-cancel:hover { .iap-btn-cancel:hover {
border-color: var(--color-danger); border-color: var(--fs-error);
color: var(--color-danger); color: var(--fs-error);
} }
.iap-stream-preview { .iap-stream-preview {
@@ -150,29 +150,29 @@ const markers: Record<DiffLine["type"], string> = {
.iap-waiting { .iap-waiting {
padding: 0.75rem; padding: 0.75rem;
font-size: 0.85rem; font-size: 0.85rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
} }
/* ── Review ── */ /* ── Review ── */
.iap-review-title { .iap-review-title {
flex: 1; flex: 1;
font-weight: 600; font-weight: 600;
color: var(--color-text); color: var(--fs-text-primary);
} }
.iap-btn-toggle { .iap-btn-toggle {
background: none; background: none;
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
color: var(--color-text-secondary); color: var(--fs-text-secondary);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
padding: 0.15rem 0.5rem; padding: 0.15rem 0.5rem;
cursor: pointer; cursor: pointer;
font-size: 0.78rem; font-size: 0.78rem;
font-family: inherit; font-family: inherit;
} }
.iap-btn-toggle:hover { .iap-btn-toggle:hover {
border-color: var(--color-primary); border-color: var(--fs-accent);
color: var(--color-primary); color: var(--fs-accent);
} }
.iap-actions { .iap-actions {
@@ -183,7 +183,7 @@ const markers: Record<DiffLine["type"], string> = {
.iap-btn-accept, .iap-btn-accept,
.iap-btn-reject { .iap-btn-reject {
border: none; border: none;
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
padding: 0.2rem 0.65rem; padding: 0.2rem 0.65rem;
cursor: pointer; cursor: pointer;
font-size: 0.8rem; font-size: 0.8rem;
@@ -191,19 +191,19 @@ const markers: Record<DiffLine["type"], string> = {
font-weight: var(--fs-weight-medium); font-weight: var(--fs-weight-medium);
} }
.iap-btn-accept { .iap-btn-accept {
background: var(--color-success); background: var(--fs-success);
color: var(--fs-text-on-action); color: var(--fs-text-on-action);
} }
.iap-btn-accept:hover { opacity: 0.85; } .iap-btn-accept:hover { opacity: 0.85; }
.iap-btn-reject { .iap-btn-reject {
background: var(--color-bg-card); background: var(--fs-surface-raised);
color: var(--color-text-secondary); color: var(--fs-text-secondary);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
} }
.iap-btn-reject:hover { .iap-btn-reject:hover {
border-color: var(--color-danger); border-color: var(--fs-error);
color: var(--color-danger); color: var(--fs-error);
} }
/* ── Diff ── */ /* ── Diff ── */
@@ -224,14 +224,14 @@ const markers: Record<DiffLine["type"], string> = {
word-break: break-word; word-break: break-word;
} }
.iap-diff-equal { color: var(--color-text-muted); } .iap-diff-equal { color: var(--fs-text-tertiary); }
.iap-diff-delete { .iap-diff-delete {
background: color-mix(in srgb, var(--color-danger) 10%, transparent); background: color-mix(in srgb, var(--fs-error) 10%, transparent);
color: var(--color-danger); color: var(--fs-error);
} }
.iap-diff-insert { .iap-diff-insert {
background: color-mix(in srgb, var(--color-success) 10%, transparent); background: color-mix(in srgb, var(--fs-success) 10%, transparent);
color: var(--color-success); color: var(--fs-success);
} }
.iap-diff-marker { .iap-diff-marker {
@@ -243,7 +243,7 @@ const markers: Record<DiffLine["type"], string> = {
.iap-diff-empty { .iap-diff-empty {
padding: 0.75rem; padding: 0.75rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
font-size: 0.85rem; font-size: 0.85rem;
font-family: inherit; font-family: inherit;
} }
+11 -11
View File
@@ -111,9 +111,9 @@ const groups = [
align-items: center; align-items: center;
gap: 2px; gap: 2px;
flex-wrap: wrap; flex-wrap: wrap;
background: var(--color-bg-secondary); background: var(--fs-surface-raised);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-md); border-radius: var(--fs-radius-lg);
padding: 3px 4px; padding: 3px 4px;
} }
@@ -127,7 +127,7 @@ const groups = [
display: block; display: block;
width: 1px; width: 1px;
height: 18px; height: 18px;
background: var(--color-border); background: var(--fs-border-color);
flex-shrink: 0; flex-shrink: 0;
margin: 0 3px; margin: 0 3px;
} }
@@ -141,7 +141,7 @@ const groups = [
border: none; border: none;
border-radius: 5px; border-radius: 5px;
background: transparent; background: transparent;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
cursor: pointer; cursor: pointer;
padding: 0; padding: 0;
transition: background 0.12s, color 0.12s, box-shadow 0.12s; transition: background 0.12s, color 0.12s, box-shadow 0.12s;
@@ -149,19 +149,19 @@ const groups = [
} }
.md-btn:hover { .md-btn:hover {
background: var(--color-bg-card); background: var(--fs-surface-raised);
color: var(--color-text); color: var(--fs-text-primary);
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
} }
.md-btn.active { .md-btn.active {
background: color-mix(in srgb, var(--color-primary) 14%, transparent); background: color-mix(in srgb, var(--fs-accent) 14%, transparent);
color: var(--color-primary); color: var(--fs-accent);
box-shadow: 0 0 0 1px color-mix(in srgb, var(--color-primary) 35%, transparent); box-shadow: 0 0 0 1px color-mix(in srgb, var(--fs-accent) 35%, transparent);
} }
.md-btn.active:hover { .md-btn.active:hover {
background: color-mix(in srgb, var(--color-primary) 22%, transparent); background: color-mix(in srgb, var(--fs-accent) 22%, transparent);
} }
.btn-icon { .btn-icon {
@@ -66,10 +66,10 @@ function onChange(e: Event) {
<style scoped> <style scoped>
.milestone-select { .milestone-select {
padding: 0.4rem 0.6rem; padding: 0.4rem 0.6rem;
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
background: var(--color-bg); background: var(--fs-surface-page);
color: var(--color-text); color: var(--fs-text-primary);
font-size: 0.875rem; font-size: 0.875rem;
font-family: inherit; font-family: inherit;
box-sizing: border-box; box-sizing: border-box;
@@ -77,7 +77,7 @@ function onChange(e: Event) {
} }
.milestone-select:focus { .milestone-select:focus {
outline: none; outline: none;
border-color: var(--color-primary); border-color: var(--fs-accent);
} }
.milestone-select:disabled { .milestone-select:disabled {
opacity: 0.5; opacity: 0.5;
+17 -17
View File
@@ -60,15 +60,15 @@ function goEdit() {
.note-card { .note-card {
display: block; display: block;
padding: 1rem; padding: 1rem;
border-radius: var(--radius-md); border-radius: var(--fs-radius-lg);
text-decoration: none; text-decoration: none;
color: inherit; color: inherit;
background: var(--color-bg-card); 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(--color-primary) 6%, transparent); 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; transition: box-shadow 0.2s, transform 0.18s ease;
} }
.note-card:hover { .note-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); transform: translateY(-2px);
} }
@@ -78,18 +78,18 @@ function goEdit() {
align-items: center; align-items: center;
gap: 0.6rem; gap: 0.6rem;
padding: 0.45rem 0.75rem; padding: 0.45rem 0.75rem;
background: var(--color-bg-card); background: var(--fs-surface-raised);
box-shadow: none; box-shadow: none;
border-radius: 0; border-radius: 0;
border-bottom: 1px solid var(--color-border); border-bottom: 1px solid var(--fs-border-color);
transform: none !important; transform: none !important;
} }
.note-card.compact:first-child { .note-card.compact:first-child {
border-top: 1px solid var(--color-border); border-top: 1px solid var(--fs-border-color);
} }
.note-card.compact:hover { .note-card.compact:hover {
box-shadow: none; box-shadow: none;
background: color-mix(in srgb, var(--color-primary) 4%, transparent); background: color-mix(in srgb, var(--fs-accent) 4%, transparent);
transform: none; transform: none;
} }
.note-title-compact { .note-title-compact {
@@ -108,7 +108,7 @@ function goEdit() {
} }
.timestamp-compact { .timestamp-compact {
font-size: 0.72rem; font-size: 0.72rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
flex-shrink: 0; flex-shrink: 0;
white-space: nowrap; white-space: nowrap;
} }
@@ -133,20 +133,20 @@ function goEdit() {
flex-shrink: 0; flex-shrink: 0;
padding: 0.25rem 0.6rem; padding: 0.25rem 0.6rem;
font-size: 0.8rem; font-size: 0.8rem;
background: var(--color-bg-card); background: var(--fs-surface-raised);
color: var(--color-text-secondary); color: var(--fs-text-secondary);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
cursor: pointer; cursor: pointer;
transition: color 0.15s, border-color 0.15s; transition: color 0.15s, border-color 0.15s;
} }
.btn-edit:hover { .btn-edit:hover {
color: var(--color-primary); color: var(--fs-accent);
border-color: var(--color-primary); border-color: var(--fs-accent);
} }
.note-preview { .note-preview {
margin: 0 0 0.5rem; margin: 0 0 0.5rem;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
font-size: 0.9rem; font-size: 0.9rem;
max-height: 7.5em; max-height: 7.5em;
overflow: hidden; overflow: hidden;
@@ -163,6 +163,6 @@ function goEdit() {
.timestamp { .timestamp {
margin-left: auto; margin-left: auto;
font-size: 0.75rem; font-size: 0.75rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
} }
</style> </style>
+7 -7
View File
@@ -60,11 +60,11 @@ onUnmounted(() => {
.btn-bell { .btn-bell {
background: none; background: none;
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
padding: 0.25rem 0.45rem; padding: 0.25rem 0.45rem;
cursor: pointer; cursor: pointer;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
@@ -72,16 +72,16 @@ onUnmounted(() => {
} }
.btn-bell:hover, .btn-bell:hover,
.btn-bell.active { .btn-bell.active {
background: var(--color-bg-card); background: var(--fs-surface-raised);
color: var(--color-text); color: var(--fs-text-primary);
border-color: var(--color-primary); border-color: var(--fs-accent);
} }
.bell-badge { .bell-badge {
position: absolute; position: absolute;
top: -5px; top: -5px;
right: -5px; right: -5px;
background: var(--color-danger); background: var(--fs-error);
color: var(--fs-text-on-action); color: var(--fs-text-on-action);
font-size: 0.6rem; font-size: 0.6rem;
font-weight: 700; font-weight: 700;
@@ -85,9 +85,9 @@ onMounted(() => store.fetchAll())
width: 340px; width: 340px;
max-height: 400px; max-height: 400px;
overflow-y: auto; overflow-y: auto;
background: var(--color-surface); background: var(--fs-surface-hover);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-lg); border-radius: var(--fs-radius-xl);
box-shadow: 0 12px 40px rgba(0, 0, 0, 0.18); box-shadow: 0 12px 40px rgba(0, 0, 0, 0.18);
z-index: 500; z-index: 500;
} }
@@ -97,10 +97,10 @@ onMounted(() => store.fetchAll())
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
padding: 0.75rem 1rem; padding: 0.75rem 1rem;
border-bottom: 1px solid var(--color-border); border-bottom: 1px solid var(--fs-border-color);
position: sticky; position: sticky;
top: 0; top: 0;
background: var(--color-surface); background: var(--fs-surface-hover);
} }
.notif-panel-title { .notif-panel-title {
@@ -114,12 +114,12 @@ onMounted(() => store.fetchAll())
align-items: flex-start; align-items: flex-start;
gap: 0.6rem; gap: 0.6rem;
padding: 0.75rem 1rem; padding: 0.75rem 1rem;
border-bottom: 1px solid var(--color-border); border-bottom: 1px solid var(--fs-border-color);
cursor: pointer; cursor: pointer;
transition: background 0.1s; transition: background 0.1s;
} }
.notif-item:last-child { border-bottom: none; } .notif-item:last-child { border-bottom: none; }
.notif-item:hover { background: var(--color-hover); } .notif-item:hover { background: var(--fs-surface-hover); }
.notif-icon { font-size: 1.2rem; flex-shrink: 0; margin-top: 0.1rem; } .notif-icon { font-size: 1.2rem; flex-shrink: 0; margin-top: 0.1rem; }
@@ -127,10 +127,10 @@ onMounted(() => store.fetchAll())
.notif-msg { .notif-msg {
margin: 0 0 0.2rem; margin: 0 0 0.2rem;
font-size: 0.85rem; font-size: 0.85rem;
color: var(--color-text); color: var(--fs-text-primary);
line-height: 1.4; line-height: 1.4;
word-break: break-word; word-break: break-word;
} }
.notif-time { font-size: 0.75rem; color: var(--color-muted); } .notif-time { font-size: 0.75rem; color: var(--fs-text-tertiary); }
</style> </style>
+8 -8
View File
@@ -74,27 +74,27 @@ function goToPage(page: number) {
} }
.page-btn { .page-btn {
padding: 0.35rem 0.7rem; padding: 0.35rem 0.7rem;
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
background: var(--color-bg-card); background: var(--fs-surface-raised);
color: var(--color-text); color: var(--fs-text-primary);
cursor: pointer; cursor: pointer;
font-size: 0.85rem; font-size: 0.85rem;
} }
.page-btn:hover:not(:disabled) { .page-btn:hover:not(:disabled) {
background: var(--color-bg-secondary); background: var(--fs-surface-raised);
} }
.page-btn:disabled { .page-btn:disabled {
opacity: 0.4; opacity: 0.4;
cursor: default; cursor: default;
} }
.page-btn.active { .page-btn.active {
background: var(--color-primary); background: var(--fs-accent);
color: var(--fs-text-on-action); color: var(--fs-text-on-action);
border-color: var(--color-primary); border-color: var(--fs-accent);
} }
.ellipsis { .ellipsis {
padding: 0 0.25rem; padding: 0 0.25rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
} }
</style> </style>
+6 -6
View File
@@ -33,15 +33,15 @@ const labels: Record<TaskPriority, string> = {
letter-spacing: 0.025em; letter-spacing: 0.025em;
} }
.priority-low { .priority-low {
background: var(--color-priority-low-bg); background: var(--fs-priority-low-bg);
color: var(--color-priority-low); color: var(--fs-priority-low);
} }
.priority-medium { .priority-medium {
background: var(--color-priority-medium-bg); background: var(--fs-priority-medium-bg);
color: var(--color-priority-medium); color: var(--fs-priority-medium);
} }
.priority-high { .priority-high {
background: var(--color-priority-high-bg); background: var(--fs-priority-high-bg);
color: var(--color-priority-high); color: var(--fs-priority-high);
} }
</style> </style>
+17 -17
View File
@@ -128,16 +128,16 @@ watch(() => [props.projectId, props.designSystemId], run);
} }
.pdt-note { .pdt-note {
background: var(--color-surface); background: var(--fs-surface-hover);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-left: 3px solid var(--color-warning); border-left: 3px solid var(--fs-warning);
border-radius: var(--fs-radius-sm); border-radius: var(--fs-radius-sm);
padding: var(--fs-space-3) var(--fs-space-4); padding: var(--fs-space-3) var(--fs-space-4);
} }
.pdt-note p { .pdt-note p {
margin: var(--fs-space-2) 0 0; margin: var(--fs-space-2) 0 0;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
font-size: var(--fs-size-body-sm); font-size: var(--fs-size-body-sm);
line-height: var(--fs-leading-body); line-height: var(--fs-leading-body);
max-width: 70ch; max-width: 70ch;
@@ -146,18 +146,18 @@ watch(() => [props.projectId, props.designSystemId], run);
.pdt-muted, .pdt-muted,
.pdt-clean, .pdt-clean,
.pdt-summary { .pdt-summary {
color: var(--color-text-muted); color: var(--fs-text-tertiary);
font-size: var(--fs-size-body-sm); font-size: var(--fs-size-body-sm);
margin: 0 0 var(--fs-space-3); margin: 0 0 var(--fs-space-3);
max-width: 70ch; max-width: 70ch;
} }
.pdt-clean { .pdt-clean {
color: var(--color-status-done); color: var(--fs-status-done);
} }
.pdt-summary { .pdt-summary {
color: var(--color-text-secondary); color: var(--fs-text-secondary);
} }
.pdt-list { .pdt-list {
@@ -170,7 +170,7 @@ watch(() => [props.projectId, props.designSystemId], run);
} }
.pdt-finding { .pdt-finding {
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--fs-radius-md); border-radius: var(--fs-radius-md);
padding: var(--fs-space-3); padding: var(--fs-space-3);
min-width: 0; min-width: 0;
@@ -179,11 +179,11 @@ watch(() => [props.projectId, props.designSystemId], run);
.pdt-title { .pdt-title {
display: block; display: block;
font-weight: var(--fs-weight-medium); font-weight: var(--fs-weight-medium);
color: var(--color-text); color: var(--fs-text-primary);
text-decoration: none; text-decoration: none;
margin-bottom: var(--fs-space-2); margin-bottom: var(--fs-space-2);
} }
.pdt-title:hover { color: var(--color-primary-solid); } .pdt-title:hover { color: var(--fs-accent); }
.pdt-row { .pdt-row {
display: flex; display: flex;
@@ -205,18 +205,18 @@ watch(() => [props.projectId, props.designSystemId], run);
} }
.pdt-tag.unknown { .pdt-tag.unknown {
background: var(--color-priority-high-bg); background: var(--fs-priority-high-bg);
color: var(--color-priority-high); color: var(--fs-priority-high);
} }
.pdt-tag.local { .pdt-tag.local {
background: var(--color-priority-medium-bg); background: var(--fs-priority-medium-bg);
color: var(--color-priority-medium); color: var(--fs-priority-medium);
} }
.pdt-tag.superseded { .pdt-tag.superseded {
background: var(--color-surface); background: var(--fs-surface-hover);
color: var(--color-text-muted); color: var(--fs-text-tertiary);
} }
.pdt-detail { .pdt-detail {
@@ -224,7 +224,7 @@ watch(() => [props.projectId, props.designSystemId], run);
flex-wrap: wrap; flex-wrap: wrap;
gap: var(--fs-space-2); gap: var(--fs-space-2);
font-size: var(--fs-size-code); font-size: var(--fs-size-code);
color: var(--color-text-secondary); color: var(--fs-text-secondary);
min-width: 0; min-width: 0;
} }
+5 -5
View File
@@ -51,10 +51,10 @@ function onChange(e: Event) {
<style scoped> <style scoped>
.project-selector { .project-selector {
padding: 0.4rem 0.5rem; padding: 0.4rem 0.5rem;
border: 1px solid var(--color-input-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
background: var(--color-bg-card); background: var(--fs-surface-raised);
color: var(--color-text); color: var(--fs-text-primary);
font-size: 0.9rem; font-size: 0.9rem;
font-family: inherit; font-family: inherit;
width: 100%; width: 100%;
@@ -62,6 +62,6 @@ function onChange(e: Event) {
} }
.project-selector:focus { .project-selector:focus {
outline: none; outline: none;
border-color: var(--color-primary); border-color: var(--fs-accent);
} }
</style> </style>
+6 -6
View File
@@ -153,19 +153,19 @@ const calendarDayMax = computed(() =>
} }
.rec-label { .rec-label {
font-size: 0.78rem; font-size: 0.78rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
min-width: 2.5rem; min-width: 2.5rem;
} }
.rec-num-input { .rec-num-input {
width: 4rem; width: 4rem;
padding: 0.25rem 0.4rem; padding: 0.25rem 0.4rem;
border: 1px solid var(--color-input-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
background: var(--color-bg); background: var(--fs-surface-page);
color: var(--color-text); color: var(--fs-text-primary);
font-size: 0.85rem; font-size: 0.85rem;
font-family: inherit; font-family: inherit;
} }
.rec-num-input:focus { outline: none; border-color: var(--color-primary); } .rec-num-input:focus { outline: none; border-color: var(--fs-accent); }
.rec-unit { min-width: 6rem; } .rec-unit { min-width: 6rem; }
</style> </style>
+5 -5
View File
@@ -28,14 +28,14 @@ defineExpose({ focus: () => inputRef.value?.focus() });
.search-input { .search-input {
width: 100%; width: 100%;
padding: 0.5rem 0.75rem; padding: 0.5rem 0.75rem;
border: 1px solid var(--color-input-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
font-size: 1rem; font-size: 1rem;
box-sizing: border-box; box-sizing: border-box;
background: var(--color-bg-card); background: var(--fs-surface-raised);
color: var(--color-text); color: var(--fs-text-primary);
} }
.search-input::placeholder { .search-input::placeholder {
color: var(--color-text-muted); color: var(--fs-text-tertiary);
} }
</style> </style>
+26 -26
View File
@@ -206,9 +206,9 @@ onMounted(async () => {
} }
.share-dialog { .share-dialog {
background: var(--color-bg-card); background: var(--fs-surface-raised);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-lg); border-radius: var(--fs-radius-xl);
width: 480px; width: 480px;
max-width: 95vw; max-width: 95vw;
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3); box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
@@ -220,7 +220,7 @@ onMounted(async () => {
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
padding: 1.25rem 1.5rem; padding: 1.25rem 1.5rem;
border-bottom: 1px solid var(--color-border); border-bottom: 1px solid var(--fs-border-color);
} }
.share-title { .share-title {
@@ -228,7 +228,7 @@ onMounted(async () => {
font-size: 1.1rem; font-size: 1.1rem;
font-weight: 700; font-weight: 700;
margin: 0; margin: 0;
color: var(--color-text); color: var(--fs-text-primary);
} }
@@ -240,17 +240,17 @@ onMounted(async () => {
.share-tab { .share-tab {
background: none; background: none;
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: 6px; border-radius: 6px;
padding: 0.3rem 0.8rem; padding: 0.3rem 0.8rem;
font-size: 0.82rem; font-size: 0.82rem;
cursor: pointer; cursor: pointer;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
transition: all 0.15s; transition: all 0.15s;
} }
.share-tab.active { .share-tab.active {
background: var(--color-primary); background: var(--fs-accent);
border-color: var(--color-primary); border-color: var(--fs-accent);
color: var(--fs-text-on-action); color: var(--fs-text-on-action);
} }
@@ -269,23 +269,23 @@ onMounted(async () => {
.share-input { .share-input {
width: 100%; width: 100%;
padding: 0.45rem 0.7rem; padding: 0.45rem 0.7rem;
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: 6px; border-radius: 6px;
background: var(--color-bg-card); background: var(--fs-surface-raised);
color: var(--color-text); color: var(--fs-text-primary);
font-size: 0.9rem; font-size: 0.9rem;
outline: none; outline: none;
transition: border-color 0.15s; transition: border-color 0.15s;
} }
.share-input:focus { border-color: var(--color-primary); } .share-input:focus { border-color: var(--fs-accent); }
.user-results { .user-results {
position: absolute; position: absolute;
top: 100%; top: 100%;
left: 0; left: 0;
right: 0; right: 0;
background: var(--color-bg-card); background: var(--fs-surface-raised);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: 6px; border-radius: 6px;
margin-top: 2px; margin-top: 2px;
list-style: none; list-style: none;
@@ -304,24 +304,24 @@ onMounted(async () => {
cursor: pointer; cursor: pointer;
transition: background 0.1s; transition: background 0.1s;
} }
.user-result-item:hover { background: var(--color-bg-secondary); } .user-result-item:hover { background: var(--fs-surface-raised); }
.user-result-name { font-weight: 600; font-size: 0.88rem; } .user-result-name { font-weight: 600; font-size: 0.88rem; }
.user-result-email { color: var(--color-text-muted); font-size: 0.8rem; } .user-result-email { color: var(--fs-text-tertiary); font-size: 0.8rem; }
.perm-select { .perm-select {
padding: 0.45rem 0.5rem; padding: 0.45rem 0.5rem;
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: 6px; border-radius: 6px;
background: var(--color-bg-card); background: var(--fs-surface-raised);
color: var(--color-text); color: var(--fs-text-primary);
font-size: 0.85rem; font-size: 0.85rem;
cursor: pointer; cursor: pointer;
} }
.btn-add-share { .btn-add-share {
padding: 0.45rem 1rem; padding: 0.45rem 1rem;
background: var(--gradient-cta); background: var(--fs-gradient-cta);
color: var(--fs-text-on-action); color: var(--fs-text-on-action);
border: none; border: none;
border-radius: 6px; border-radius: 6px;
@@ -342,7 +342,7 @@ onMounted(async () => {
font-weight: 600; font-weight: 600;
text-transform: uppercase; text-transform: uppercase;
letter-spacing: 0.06em; letter-spacing: 0.06em;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
margin: 0 0 0.5rem; margin: 0 0 0.5rem;
} }
@@ -361,7 +361,7 @@ onMounted(async () => {
gap: 0.5rem; gap: 0.5rem;
padding: 0.5rem 0.75rem; padding: 0.5rem 0.75rem;
border-radius: 8px; border-radius: 8px;
background: var(--color-bg-secondary); background: var(--fs-surface-raised);
} }
.share-target-icon { font-size: 1rem; flex-shrink: 0; } .share-target-icon { font-size: 1rem; flex-shrink: 0; }
@@ -369,10 +369,10 @@ onMounted(async () => {
.perm-select-inline { .perm-select-inline {
padding: 0.25rem 0.4rem; padding: 0.25rem 0.4rem;
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: 4px; border-radius: 4px;
background: var(--color-bg-card); background: var(--fs-surface-raised);
color: var(--color-text); color: var(--fs-text-primary);
font-size: 0.8rem; font-size: 0.8rem;
cursor: pointer; cursor: pointer;
} }
@@ -127,7 +127,7 @@ const totalTokens = () =>
.srp-legend { .srp-legend {
font-size: var(--fs-size-label); font-size: var(--fs-size-label);
font-weight: var(--fs-weight-medium); font-weight: var(--fs-weight-medium);
color: var(--color-text); color: var(--fs-text-primary);
padding: 0 var(--fs-space-2); padding: 0 var(--fs-space-2);
} }
@@ -135,7 +135,7 @@ const totalTokens = () =>
.srp-note { .srp-note {
margin: 0 0 var(--fs-space-3); margin: 0 0 var(--fs-space-3);
font-size: var(--fs-size-body-sm); font-size: var(--fs-size-body-sm);
color: var(--color-text-secondary); color: var(--fs-text-secondary);
line-height: var(--fs-leading-body); line-height: var(--fs-leading-body);
max-width: 62ch; max-width: 62ch;
} }
@@ -160,16 +160,16 @@ const totalTokens = () =>
cursor: pointer; cursor: pointer;
min-width: 0; min-width: 0;
} }
.srp-item:hover { background: var(--color-hover); } .srp-item:hover { background: var(--fs-surface-hover); }
.srp-name { .srp-name {
font-size: var(--fs-size-body-sm); font-size: var(--fs-size-body-sm);
color: var(--color-text); color: var(--fs-text-primary);
} }
.srp-count { .srp-count {
font-size: var(--fs-size-tiny); font-size: var(--fs-size-tiny);
color: var(--color-text-muted); color: var(--fs-text-tertiary);
font-variant-numeric: tabular-nums; font-variant-numeric: tabular-nums;
} }
@@ -178,7 +178,7 @@ const totalTokens = () =>
.srp-desc { .srp-desc {
grid-column: 1 / -1; grid-column: 1 / -1;
font-size: var(--fs-size-tiny); font-size: var(--fs-size-tiny);
color: var(--color-text-muted); color: var(--fs-text-tertiary);
line-height: var(--fs-leading-body); line-height: var(--fs-leading-body);
} }
@@ -196,7 +196,7 @@ const totalTokens = () =>
align-items: center; align-items: center;
gap: var(--fs-space-2); gap: var(--fs-space-2);
font-size: var(--fs-size-body-sm); font-size: var(--fs-size-body-sm);
color: var(--color-text-secondary); color: var(--fs-text-secondary);
} }
.srp-prefix-input { .srp-prefix-input {
@@ -207,6 +207,6 @@ const totalTokens = () =>
.srp-total { .srp-total {
font-size: var(--fs-size-tiny); font-size: var(--fs-size-tiny);
color: var(--color-text-muted); color: var(--fs-text-tertiary);
} }
</style> </style>
+8 -8
View File
@@ -38,20 +38,20 @@ const labels: Record<TaskStatus, string> = {
letter-spacing: 0.025em; letter-spacing: 0.025em;
} }
.status-todo { .status-todo {
background: color-mix(in srgb, var(--color-status-todo-bg) 78%, var(--color-status-todo) 22%); background: color-mix(in srgb, var(--fs-status-todo-bg) 78%, var(--fs-status-todo) 22%);
color: color-mix(in srgb, var(--color-status-todo) 85%, #000 15%); color: color-mix(in srgb, var(--fs-status-todo) 85%, #000 15%);
} }
.status-in_progress { .status-in_progress {
background: color-mix(in srgb, var(--color-status-in-progress-bg) 78%, var(--color-status-in-progress) 22%); background: color-mix(in srgb, var(--fs-status-in-progress-bg) 78%, var(--fs-status-in-progress) 22%);
color: color-mix(in srgb, var(--color-status-in-progress) 85%, #000 15%); color: color-mix(in srgb, var(--fs-status-in-progress) 85%, #000 15%);
} }
.status-done { .status-done {
background: color-mix(in srgb, var(--color-status-done-bg) 78%, var(--color-status-done) 22%); background: color-mix(in srgb, var(--fs-status-done-bg) 78%, var(--fs-status-done) 22%);
color: color-mix(in srgb, var(--color-status-done) 85%, #000 15%); color: color-mix(in srgb, var(--fs-status-done) 85%, #000 15%);
} }
.status-cancelled { .status-cancelled {
background: color-mix(in srgb, var(--color-bg-secondary) 78%, var(--color-text-muted) 22%); background: color-mix(in srgb, var(--fs-surface-raised) 78%, var(--fs-text-tertiary) 22%);
color: var(--color-text-muted); color: var(--fs-text-tertiary);
} }
.clickable { .clickable {
cursor: pointer; cursor: pointer;
@@ -70,9 +70,9 @@ defineExpose({ onKeyDown });
list-style: none; list-style: none;
margin: 0; margin: 0;
padding: 0; padding: 0;
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
background: var(--color-bg-card); background: var(--fs-surface-raised);
box-shadow: 0 4px 12px var(--color-shadow); box-shadow: 0 4px 12px var(--color-shadow);
max-height: 200px; max-height: 200px;
overflow-y: auto; overflow-y: auto;
@@ -85,6 +85,6 @@ defineExpose({ onKeyDown });
} }
.ac-item:hover, .ac-item:hover,
.ac-item.active { .ac-item.active {
background: var(--color-bg-secondary); background: var(--fs-surface-raised);
} }
</style> </style>
+58 -58
View File
@@ -253,7 +253,7 @@ async function confirmDelete() {
<template v-else> <template v-else>
<span <span
class="system-swatch" class="system-swatch"
:style="{ background: system.color || 'var(--color-text-muted)' }" :style="{ background: system.color || 'var(--fs-text-tertiary)' }"
aria-hidden="true" aria-hidden="true"
></span> ></span>
<div class="system-body"> <div class="system-body">
@@ -325,41 +325,41 @@ async function confirmDelete() {
/* ── Open issues ──────────────────────────────────────────────── */ /* ── Open issues ──────────────────────────────────────────────── */
.open-issues { display: flex; flex-direction: column; gap: 0.35rem; } .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-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 { 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(--color-bg-secondary); } .issue-link:hover { background: var(--fs-surface-raised); }
.issue-mark { color: var(--color-text-muted); flex-shrink: 0; } .issue-mark { color: var(--fs-text-tertiary); flex-shrink: 0; }
.issue-mark.imk-in_progress { color: var(--color-primary); } .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-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-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 ──────────────────────────────────────────────────── */ /* ── Toolbar ──────────────────────────────────────────────────── */
.systems-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 0.75rem; } .systems-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 0.75rem; }
.btn-add-system { .btn-add-system {
background: none; background: none;
border: 1px dashed var(--color-border); border: 1px dashed var(--fs-border-color);
color: var(--color-text-secondary); color: var(--fs-text-secondary);
padding: 0.28rem 0.65rem; padding: 0.28rem 0.65rem;
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
cursor: pointer; cursor: pointer;
font-size: 0.78rem; font-size: 0.78rem;
font-family: inherit; font-family: inherit;
} }
.btn-add-system:hover { 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(--color-primary); color: var(--color-primary); } .btn-add-system:focus-visible { outline: none; border-color: var(--fs-accent); color: var(--fs-accent); }
.archived-toggle { .archived-toggle {
display: inline-flex; display: inline-flex;
align-items: center; align-items: center;
gap: 0.4rem; gap: 0.4rem;
font-size: 0.78rem; font-size: 0.78rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
cursor: pointer; cursor: pointer;
user-select: none; user-select: none;
} }
.archived-checkbox { accent-color: var(--color-primary); cursor: pointer; } .archived-checkbox { accent-color: var(--fs-accent); cursor: pointer; }
/* ── Create / edit form ───────────────────────────────────────── */ /* ── Create / edit form ───────────────────────────────────────── */
.system-form { .system-form {
@@ -367,23 +367,23 @@ async function confirmDelete() {
flex-direction: column; flex-direction: column;
gap: 0.5rem; gap: 0.5rem;
padding: 0.75rem; padding: 0.75rem;
background: var(--color-bg-card); background: var(--fs-surface-raised);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-md); border-radius: var(--fs-radius-lg);
} }
.system-form--inline { padding: 0; background: none; border: none; flex: 1; } .system-form--inline { padding: 0; background: none; border: none; flex: 1; }
.system-input, .system-textarea { .system-input, .system-textarea {
padding: 0.4rem 0.6rem; padding: 0.4rem 0.6rem;
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
background: var(--color-bg); background: var(--fs-surface-page);
color: var(--color-text); color: var(--fs-text-primary);
font-size: 0.875rem; font-size: 0.875rem;
font-family: inherit; font-family: inherit;
box-sizing: border-box; box-sizing: border-box;
width: 100%; 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-textarea { resize: vertical; }
.system-form-actions { display: flex; gap: 0.4rem; } .system-form-actions { display: flex; gap: 0.4rem; }
@@ -417,9 +417,9 @@ async function confirmDelete() {
align-items: flex-start; align-items: flex-start;
gap: 0.6rem; gap: 0.6rem;
padding: 0.6rem 0.75rem; padding: 0.6rem 0.75rem;
background: var(--color-bg-card); background: var(--fs-surface-raised);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-md); border-radius: var(--fs-radius-lg);
} }
.system-card--archived { opacity: 0.6; } .system-card--archived { opacity: 0.6; }
@@ -433,13 +433,13 @@ async function confirmDelete() {
} }
.system-body { flex: 1; min-width: 0; } .system-body { flex: 1; min-width: 0; }
.system-name-row { display: flex; align-items: center; gap: 0.5rem; flex-wrap: wrap; } .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 { .issue-badge {
font-size: 0.7rem; font-size: 0.7rem;
font-weight: 500; font-weight: 500;
background: color-mix(in srgb, var(--color-primary) 12%, transparent); background: color-mix(in srgb, var(--fs-accent) 12%, transparent);
border: 1px solid color-mix(in srgb, var(--color-primary) 30%, transparent); border: 1px solid color-mix(in srgb, var(--fs-accent) 30%, transparent);
color: var(--color-primary); color: var(--fs-accent);
border-radius: 999px; border-radius: 999px;
padding: 0.05rem 0.45rem; padding: 0.05rem 0.45rem;
flex-shrink: 0; flex-shrink: 0;
@@ -449,15 +449,15 @@ async function confirmDelete() {
font-weight: 500; font-weight: 500;
text-transform: uppercase; text-transform: uppercase;
letter-spacing: 0.04em; letter-spacing: 0.04em;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
background: color-mix(in srgb, var(--color-text-muted) 12%, transparent); background: color-mix(in srgb, var(--fs-text-tertiary) 12%, transparent);
border-radius: 999px; border-radius: 999px;
padding: 0.05rem 0.45rem; padding: 0.05rem 0.45rem;
} }
.system-description { .system-description {
margin: 0.25rem 0 0; margin: 0.25rem 0 0;
font-size: 0.82rem; font-size: 0.82rem;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
line-height: 1.4; line-height: 1.4;
word-break: break-word; word-break: break-word;
} }
@@ -472,15 +472,15 @@ async function confirmDelete() {
background: none; background: none;
border: none; border: none;
cursor: pointer; cursor: pointer;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
width: 26px; width: 26px;
height: 26px; height: 26px;
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
transition: background 0.12s, color 0.12s; transition: background 0.12s, color 0.12s;
} }
.action-btn:hover { background: var(--color-bg-secondary); color: var(--color-text); } .action-btn:hover { background: var(--fs-surface-raised); color: var(--fs-text-primary); }
.action-btn:focus-visible { outline: 2px solid var(--color-primary); outline-offset: 1px; opacity: 1; } .action-btn:focus-visible { outline: 2px solid var(--fs-accent); outline-offset: 1px; opacity: 1; }
.action-delete:hover { color: var(--color-danger); } .action-delete:hover { color: var(--fs-error); }
/* ── Empty ────────────────────────────────────────────────────── */ /* ── Empty ────────────────────────────────────────────────────── */
.systems-empty { .systems-empty {
@@ -490,25 +490,25 @@ async function confirmDelete() {
gap: 0.4rem; gap: 0.4rem;
padding: 2rem 1rem; padding: 2rem 1rem;
text-align: center; text-align: center;
border: 1px dashed var(--color-border); border: 1px dashed var(--fs-border-color);
border-radius: var(--radius-md); border-radius: var(--fs-radius-lg);
} }
.empty-title { margin: 0; font-weight: 500; color: var(--color-text); } .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(--color-text-muted); max-width: 32ch; } .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 ─────────────────────────────────────────────────── */ /* ── Skeleton ─────────────────────────────────────────────────── */
@keyframes skel-shine { to { background-position: 200% center; } } @keyframes skel-shine { to { background-position: 200% center; } }
.systems-skeleton { display: flex; flex-direction: column; gap: 0.4rem; } .systems-skeleton { display: flex; flex-direction: column; gap: 0.4rem; }
.skel-row { .skel-row {
height: 3rem; height: 3rem;
border-radius: var(--radius-md); border-radius: var(--fs-radius-lg);
background: linear-gradient( background: linear-gradient(
90deg, 90deg,
var(--color-bg-secondary) 25%, var(--fs-surface-raised) 25%,
color-mix(in srgb, var(--color-text-muted) 16%, var(--color-bg-secondary)) 50%, color-mix(in srgb, var(--fs-text-tertiary) 16%, var(--fs-surface-raised)) 50%,
var(--color-bg-secondary) 75% var(--fs-surface-raised) 75%
); );
background-size: 200% 100%; background-size: 200% 100%;
animation: skel-shine 1.5s ease infinite; animation: skel-shine 1.5s ease infinite;
@@ -518,33 +518,33 @@ async function confirmDelete() {
/* ── Modal ────────────────────────────────────────────────────── */ /* ── Modal ────────────────────────────────────────────────────── */
.modal-overlay { .modal-overlay {
position: fixed; inset: 0; position: fixed; inset: 0;
background: var(--color-overlay); background: var(--fs-overlay);
display: flex; align-items: center; justify-content: center; display: flex; align-items: center; justify-content: center;
z-index: 200; z-index: 200;
} }
.modal-card { .modal-card {
background: var(--color-bg-card); background: var(--fs-surface-raised);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-md); border-radius: var(--fs-radius-lg);
padding: 1.5rem; padding: 1.5rem;
width: 100%; width: 100%;
max-width: 400px; max-width: 400px;
box-shadow: 0 8px 32px var(--color-shadow); box-shadow: 0 8px 32px var(--color-shadow);
} }
.modal-title { margin: 0 0 0.75rem; font-size: 1.05rem; } .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-actions { display: flex; justify-content: flex-end; gap: 0.5rem; }
.modal-btn { .modal-btn {
padding: 0.4rem 0.9rem; padding: 0.4rem 0.9rem;
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
background: var(--color-bg-secondary); background: var(--fs-surface-raised);
color: var(--color-text); color: var(--fs-text-primary);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
cursor: pointer; cursor: pointer;
font-size: 0.875rem; font-size: 0.875rem;
font-family: inherit; font-family: inherit;
} }
.modal-btn:hover { background: var(--color-bg); } .modal-btn:hover { background: var(--fs-surface-page); }
.modal-btn-danger { background: var(--color-action-destructive); border-color: var(--color-action-destructive); color: var(--fs-text-on-action); } .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(--color-action-destructive-hover); border-color: var(--color-action-destructive-hover); } .modal-btn-danger:hover { background: var(--fs-action-destructive-hover); border-color: var(--fs-action-destructive-hover); }
</style> </style>
+3 -3
View File
@@ -60,7 +60,7 @@ function scrollTo(id: string) {
.toc-title { .toc-title {
font-size: 0.8rem; font-size: 0.8rem;
text-transform: uppercase; text-transform: uppercase;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
margin: 0 0 0.5rem; margin: 0 0 0.5rem;
letter-spacing: 0.05em; letter-spacing: 0.05em;
} }
@@ -73,11 +73,11 @@ function scrollTo(id: string) {
margin-bottom: 0.25rem; margin-bottom: 0.25rem;
} }
.toc-link { .toc-link {
color: var(--color-text-muted); color: var(--fs-text-tertiary);
text-decoration: none; text-decoration: none;
cursor: pointer; cursor: pointer;
} }
.toc-link:hover { .toc-link:hover {
color: var(--color-primary); color: var(--fs-accent);
} }
</style> </style>
+13 -13
View File
@@ -154,9 +154,9 @@ function focusInput() {
align-items: center; align-items: center;
gap: 0.35rem; gap: 0.35rem;
padding: 0.35rem 0.6rem; padding: 0.35rem 0.6rem;
border: 1px solid var(--color-input-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
background: var(--color-bg-card); background: var(--fs-surface-raised);
cursor: text; cursor: text;
min-height: 2.25rem; min-height: 2.25rem;
} }
@@ -166,9 +166,9 @@ function focusInput() {
gap: 0.2rem; gap: 0.2rem;
padding: 0.15rem 0.5rem; padding: 0.15rem 0.5rem;
border-radius: 999px; border-radius: 999px;
background: color-mix(in srgb, var(--color-primary) 15%, transparent); background: color-mix(in srgb, var(--fs-accent) 15%, transparent);
border: 1px solid var(--color-primary); border: 1px solid var(--fs-accent);
color: var(--color-primary); color: var(--fs-accent);
font-size: 0.8rem; font-size: 0.8rem;
white-space: nowrap; white-space: nowrap;
} }
@@ -195,7 +195,7 @@ function focusInput() {
border: none; border: none;
outline: none; outline: none;
background: transparent; background: transparent;
color: var(--color-text); color: var(--fs-text-primary);
font-size: 0.875rem; font-size: 0.875rem;
padding: 0; padding: 0;
} }
@@ -205,9 +205,9 @@ function focusInput() {
left: 0; left: 0;
min-width: 160px; min-width: 160px;
max-width: 280px; max-width: 280px;
background: var(--color-bg-card); background: var(--fs-surface-raised);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
list-style: none; list-style: none;
margin: 0; margin: 0;
@@ -218,11 +218,11 @@ function focusInput() {
padding: 0.35rem 0.75rem; padding: 0.35rem 0.75rem;
font-size: 0.85rem; font-size: 0.85rem;
cursor: pointer; cursor: pointer;
color: var(--color-text); color: var(--fs-text-primary);
} }
.tag-autocomplete-item:hover, .tag-autocomplete-item:hover,
.tag-autocomplete-item.selected { .tag-autocomplete-item.selected {
background: var(--color-bg-hover); background: var(--fs-surface-hover);
color: var(--color-primary); color: var(--fs-accent);
} }
</style> </style>
+5 -5
View File
@@ -29,8 +29,8 @@ defineEmits<{
display: inline-flex; display: inline-flex;
align-items: center; align-items: center;
gap: 0.25rem; gap: 0.25rem;
background: var(--color-tag-bg); background: var(--fs-accent-soft);
color: var(--color-tag-text); color: var(--fs-accent);
padding: 0.15rem 0.5rem; padding: 0.15rem 0.5rem;
border-radius: 12px; border-radius: 12px;
font-size: 0.8rem; font-size: 0.8rem;
@@ -39,13 +39,13 @@ defineEmits<{
transition: color 0.15s, background 0.15s; transition: color 0.15s, background 0.15s;
} }
.tag-pill:hover { .tag-pill:hover {
color: var(--color-primary); color: var(--fs-accent);
background: var(--color-primary-tint); background: var(--fs-accent-soft);
} }
.dismiss { .dismiss {
background: none; background: none;
border: none; border: none;
color: var(--color-tag-text); color: var(--fs-accent);
cursor: pointer; cursor: pointer;
font-size: 0.9rem; font-size: 0.9rem;
line-height: 1; line-height: 1;
+20 -20
View File
@@ -108,15 +108,15 @@ function isOverdue(): boolean {
.task-card { .task-card {
display: block; display: block;
padding: 1rem; padding: 1rem;
border-radius: var(--radius-md); border-radius: var(--fs-radius-lg);
text-decoration: none; text-decoration: none;
color: inherit; color: inherit;
background: var(--color-bg-card); 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(--color-primary) 6%, transparent); 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; transition: box-shadow 0.2s, transform 0.18s ease;
} }
.task-card:hover { .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); transform: translateY(-2px);
} }
@@ -144,19 +144,19 @@ function isOverdue(): boolean {
opacity: 0.8; opacity: 0.8;
} }
.dot-todo { .dot-todo {
background: var(--color-status-todo); background: var(--fs-status-todo);
border: 2px solid var(--color-status-todo); border: 2px solid var(--fs-status-todo);
background: transparent; background: transparent;
border: 2px solid var(--color-text-muted); border: 2px solid var(--fs-text-tertiary);
} }
.dot-in-progress { .dot-in-progress {
background: var(--color-status-in-progress); background: var(--fs-status-in-progress);
} }
.dot-done { .dot-done {
background: var(--color-status-done); background: var(--fs-status-done);
} }
.dot-cancelled { .dot-cancelled {
background: var(--color-status-cancelled); background: var(--fs-status-cancelled);
} }
.task-title-compact { .task-title-compact {
@@ -170,10 +170,10 @@ function isOverdue(): boolean {
} }
.project-crumb { .project-crumb {
font-size: 0.75rem; font-size: 0.75rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
background: var(--color-bg-secondary); background: var(--fs-surface-raised);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
padding: 0.1rem 0.4rem; padding: 0.1rem 0.4rem;
white-space: nowrap; white-space: nowrap;
flex-shrink: 0; flex-shrink: 0;
@@ -185,12 +185,12 @@ function isOverdue(): boolean {
} }
.due-compact { .due-compact {
font-size: 0.75rem; font-size: 0.75rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
white-space: nowrap; white-space: nowrap;
flex-shrink: 0; flex-shrink: 0;
} }
.due-compact.overdue { .due-compact.overdue {
color: var(--color-danger); color: var(--fs-error);
font-weight: 600; font-weight: 600;
} }
/* Full layout */ /* Full layout */
@@ -211,7 +211,7 @@ function isOverdue(): boolean {
} }
.task-preview { .task-preview {
margin: 0 0 0.5rem; margin: 0 0 0.5rem;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
font-size: 0.9rem; font-size: 0.9rem;
max-height: 7.5em; max-height: 7.5em;
overflow: hidden; overflow: hidden;
@@ -224,15 +224,15 @@ function isOverdue(): boolean {
} }
.due-date { .due-date {
font-size: 0.8rem; font-size: 0.8rem;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
} }
.due-date.overdue { .due-date.overdue {
color: var(--color-overdue); color: var(--fs-overdue);
font-weight: 600; font-weight: 600;
} }
.timestamp { .timestamp {
margin-left: auto; margin-left: auto;
font-size: 0.75rem; font-size: 0.75rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
} }
</style> </style>
+19 -19
View File
@@ -175,9 +175,9 @@ onMounted(loadLogs);
<style scoped> <style scoped>
.log-section { .log-section {
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
background: var(--color-bg-secondary); background: var(--fs-surface-raised);
padding: 0.6rem 0.75rem; padding: 0.6rem 0.75rem;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
@@ -187,7 +187,7 @@ onMounted(loadLogs);
.log-header { .log-header {
font-size: 0.8rem; font-size: 0.8rem;
font-weight: 600; font-weight: 600;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
text-transform: uppercase; text-transform: uppercase;
letter-spacing: 0.04em; letter-spacing: 0.04em;
margin-bottom: 0.15rem; margin-bottom: 0.15rem;
@@ -195,11 +195,11 @@ onMounted(loadLogs);
.log-empty { .log-empty {
font-size: 0.8rem; font-size: 0.8rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
} }
.log-entry { .log-entry {
border-top: 1px solid var(--color-border); border-top: 1px solid var(--fs-border-color);
padding-top: 0.5rem; padding-top: 0.5rem;
} }
@@ -212,11 +212,11 @@ onMounted(loadLogs);
} }
.log-date { .log-date {
color: var(--color-text-muted); color: var(--fs-text-tertiary);
} }
.log-duration-badge { .log-duration-badge {
background: var(--color-primary); background: var(--fs-accent);
color: var(--fs-text-on-action); color: var(--fs-text-on-action);
border-radius: 99px; border-radius: 99px;
padding: 0.1rem 0.5rem; padding: 0.1rem 0.5rem;
@@ -235,10 +235,10 @@ onMounted(loadLogs);
.log-textarea { .log-textarea {
width: 100%; width: 100%;
padding: 0.4rem 0.5rem; padding: 0.4rem 0.5rem;
border: 1px solid var(--color-input-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
background: var(--color-bg); background: var(--fs-surface-page);
color: var(--color-text); color: var(--fs-text-primary);
font-size: 0.875rem; font-size: 0.875rem;
font-family: inherit; font-family: inherit;
resize: vertical; resize: vertical;
@@ -247,7 +247,7 @@ onMounted(loadLogs);
.log-textarea:focus { .log-textarea:focus {
outline: none; outline: none;
border-color: var(--color-primary); border-color: var(--fs-accent);
} }
.log-add-controls, .log-add-controls,
@@ -259,7 +259,7 @@ onMounted(loadLogs);
.log-duration-label { .log-duration-label {
font-size: 0.8rem; font-size: 0.8rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
display: flex; display: flex;
align-items: center; align-items: center;
gap: 0.25rem; gap: 0.25rem;
@@ -268,16 +268,16 @@ onMounted(loadLogs);
.log-duration-input { .log-duration-input {
width: 5rem; width: 5rem;
padding: 0.3rem 0.4rem; padding: 0.3rem 0.4rem;
border: 1px solid var(--color-input-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
background: var(--color-bg); background: var(--fs-surface-page);
color: var(--color-text); color: var(--fs-text-primary);
font-size: 0.875rem; font-size: 0.875rem;
} }
.log-duration-input:focus { .log-duration-input:focus {
outline: none; outline: none;
border-color: var(--color-primary); border-color: var(--fs-accent);
} }
+1 -1
View File
@@ -156,7 +156,7 @@ defineExpose({ editor });
<style scoped> <style scoped>
.editor-error { .editor-error {
padding: 1rem; padding: 1rem;
color: var(--color-danger); color: var(--fs-error);
font-size: 0.9rem; font-size: 0.9rem;
} }
</style> </style>
@@ -57,13 +57,13 @@ const toastStore = useToastStore();
color: var(--fs-text-on-action); color: var(--fs-text-on-action);
} }
.toast--success { .toast--success {
background: var(--color-toast-success); background: var(--fs-success);
} }
.toast--error { .toast--error {
background: var(--color-toast-error); background: var(--fs-error);
} }
.toast--warning { .toast--warning {
background: var(--color-warning); background: var(--fs-warning);
color: #1a1a1a; color: #1a1a1a;
} }
.toast--warning .toast-close { .toast--warning .toast-close {
+20 -20
View File
@@ -183,22 +183,22 @@ function ruleWidth(value: string): string {
padding: 0.2rem 0.6rem; padding: 0.2rem 0.6rem;
font: inherit; font: inherit;
font-size: var(--fs-size-body-sm); font-size: var(--fs-size-body-sm);
color: var(--color-text-secondary); color: var(--fs-text-secondary);
background: transparent; background: transparent;
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--fs-radius-sm); border-radius: var(--fs-radius-sm);
cursor: pointer; cursor: pointer;
} }
.tp-mode:hover { color: var(--color-text); } .tp-mode:hover { color: var(--fs-text-primary); }
.tp-mode.active { .tp-mode.active {
color: var(--color-primary-solid); color: var(--fs-accent);
border-color: var(--color-primary); border-color: var(--fs-accent);
background: var(--color-primary-faint); background: var(--fs-accent-faint);
} }
.tp-modes-note { .tp-modes-note {
font-size: var(--fs-size-tiny); font-size: var(--fs-size-tiny);
color: var(--color-text-muted); color: var(--fs-text-tertiary);
} }
.tp-group { margin-bottom: var(--fs-space-6); } .tp-group { margin-bottom: var(--fs-space-6); }
@@ -207,7 +207,7 @@ function ruleWidth(value: string): string {
text-transform: uppercase; text-transform: uppercase;
letter-spacing: var(--fs-tracking-tiny); letter-spacing: var(--fs-tracking-tiny);
font-size: var(--fs-size-tiny); font-size: var(--fs-size-tiny);
color: var(--color-text-muted); color: var(--fs-text-tertiary);
margin: 0 0 var(--fs-space-3); margin: 0 0 var(--fs-space-3);
padding-bottom: var(--fs-space-2); padding-bottom: var(--fs-space-2);
border-bottom: var(--fs-border); border-bottom: var(--fs-border);
@@ -243,7 +243,7 @@ function ruleWidth(value: string): string {
border-radius: var(--fs-radius-sm); border-radius: var(--fs-radius-sm);
padding: var(--fs-space-1); padding: var(--fs-space-1);
overflow: hidden; 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 /* 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: background-image:
linear-gradient(var(--tp-fill), var(--tp-fill)), linear-gradient(var(--tp-fill), var(--tp-fill)),
repeating-conic-gradient( repeating-conic-gradient(
var(--color-border) 0% 25%, var(--fs-border-color) 0% 25%,
var(--color-bg-secondary) 0% 50% var(--fs-surface-raised) 0% 50%
); );
background-size: auto, 10px 10px; background-size: auto, 10px 10px;
} }
@@ -282,7 +282,7 @@ function ruleWidth(value: string): string {
width: 100%; width: 100%;
height: 100%; height: 100%;
border-radius: calc(var(--fs-radius-sm) - 2px); border-radius: calc(var(--fs-radius-sm) - 2px);
background: var(--color-bg-card); background: var(--fs-surface-raised);
} }
.tp-rule-wrap { .tp-rule-wrap {
@@ -297,27 +297,27 @@ function ruleWidth(value: string): string {
height: 0.4rem; height: 0.4rem;
min-width: 1px; min-width: 1px;
flex: none; flex: none;
background: var(--color-primary-solid); background: var(--fs-accent);
border-radius: 999px; border-radius: 999px;
} }
.tp-rule-label { .tp-rule-label {
font-family: var(--fs-font-mono); font-family: var(--fs-font-mono);
font-size: var(--fs-size-tiny); font-size: var(--fs-size-tiny);
color: var(--color-text-muted); color: var(--fs-text-tertiary);
white-space: nowrap; white-space: nowrap;
} }
.tp-font { .tp-font {
font-size: 1.4rem; font-size: 1.4rem;
color: var(--color-text); color: var(--fs-text-primary);
line-height: 1; line-height: 1;
} }
.tp-plain { .tp-plain {
font-family: var(--fs-font-mono); font-family: var(--fs-font-mono);
font-size: var(--fs-size-code); font-size: var(--fs-size-code);
color: var(--color-text-secondary); color: var(--fs-text-secondary);
white-space: nowrap; white-space: nowrap;
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
@@ -325,7 +325,7 @@ function ruleWidth(value: string): string {
.tp-undecided { .tp-undecided {
font-size: var(--fs-size-tiny); font-size: var(--fs-size-tiny);
color: var(--color-text-muted); color: var(--fs-text-tertiary);
font-style: italic; font-style: italic;
} }
@@ -346,17 +346,17 @@ function ruleWidth(value: string): string {
.tp-name { .tp-name {
font-size: var(--fs-size-body-sm); font-size: var(--fs-size-body-sm);
color: var(--color-text); color: var(--fs-text-primary);
} }
.tp-value { .tp-value {
font-family: var(--fs-font-mono); font-family: var(--fs-font-mono);
font-size: var(--fs-size-tiny); font-size: var(--fs-size-tiny);
color: var(--color-text-secondary); color: var(--fs-text-secondary);
} }
.tp-purpose { .tp-purpose {
font-size: var(--fs-size-tiny); font-size: var(--fs-size-tiny);
color: var(--color-text-muted); color: var(--fs-text-tertiary);
} }
</style> </style>
@@ -164,7 +164,7 @@ function restore() {
<style scoped> <style scoped>
.vh-section { .vh-section {
border-top: 1px solid var(--color-border); border-top: 1px solid var(--fs-border-color);
} }
.vh-header { .vh-header {
@@ -179,19 +179,19 @@ function restore() {
font-family: inherit; font-family: inherit;
text-align: left; text-align: left;
} }
.vh-header:hover { background: var(--color-bg-secondary); } .vh-header:hover { background: var(--fs-surface-raised); }
.vh-title { .vh-title {
font-size: 0.75rem; font-size: 0.75rem;
font-weight: 700; font-weight: 700;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
text-transform: uppercase; text-transform: uppercase;
letter-spacing: 0.05em; letter-spacing: 0.05em;
} }
.vh-chevron { .vh-chevron {
font-size: 0.7rem; font-size: 0.7rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
} }
.vh-body { .vh-body {
@@ -201,20 +201,20 @@ function restore() {
.vh-empty { .vh-empty {
padding: 0.5rem 0.75rem; padding: 0.5rem 0.75rem;
font-size: 0.8rem; font-size: 0.8rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
} }
.vh-item { .vh-item {
padding: 0.35rem 0.75rem; padding: 0.35rem 0.75rem;
font-size: 0.8rem; font-size: 0.8rem;
color: var(--color-text); color: var(--fs-text-primary);
cursor: pointer; cursor: pointer;
font-family: monospace; font-family: monospace;
border-left: 2px solid transparent; border-left: 2px solid transparent;
} }
.vh-item:hover { .vh-item:hover {
background: var(--color-bg-secondary); background: var(--fs-surface-raised);
border-left-color: var(--color-primary); border-left-color: var(--fs-accent);
} }
.vh-diff-actions { .vh-diff-actions {
@@ -225,20 +225,20 @@ function restore() {
.vh-btn-back { .vh-btn-back {
background: none; background: none;
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
padding: 0.25rem 0.6rem; padding: 0.25rem 0.6rem;
font-size: 0.78rem; font-size: 0.78rem;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
cursor: pointer; cursor: pointer;
font-family: inherit; font-family: inherit;
} }
.vh-btn-back:hover { border-color: var(--color-primary); color: var(--color-primary); } .vh-btn-back:hover { border-color: var(--fs-accent); color: var(--fs-accent); }
.vh-btn-restore { .vh-btn-restore {
background: var(--color-action-primary); background: var(--fs-action-primary);
border: none; border: none;
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
padding: 0.25rem 0.6rem; padding: 0.25rem 0.6rem;
font-size: 0.78rem; font-size: 0.78rem;
color: var(--fs-text-on-action); color: var(--fs-text-on-action);
+2 -2
View File
@@ -50,11 +50,11 @@ const label = computed(() => {
background: none; background: none;
border: none; border: none;
font-size: 0.72rem; font-size: 0.72rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
cursor: pointer; cursor: pointer;
padding: 0; padding: 0;
white-space: nowrap; white-space: nowrap;
flex-shrink: 0; flex-shrink: 0;
} }
.word-count:hover { color: var(--color-text); } .word-count:hover { color: var(--fs-text-primary); }
</style> </style>
+35 -35
View File
@@ -452,8 +452,8 @@ defineExpose({ reload: loadProjectNotes });
flex-direction: row; flex-direction: row;
height: 100%; height: 100%;
overflow: hidden; overflow: hidden;
background: var(--color-surface); background: var(--fs-surface-hover);
border-left: 1px solid var(--color-border); border-left: 1px solid var(--fs-border-color);
} }
/* ── Left rail ── */ /* ── Left rail ── */
@@ -463,7 +463,7 @@ defineExpose({ reload: loadProjectNotes });
display: flex; display: flex;
flex-direction: column; flex-direction: column;
overflow: hidden; overflow: hidden;
background: var(--color-bg-card); background: var(--fs-surface-raised);
} }
.rail-header { .rail-header {
@@ -471,12 +471,12 @@ defineExpose({ reload: loadProjectNotes });
align-items: center; align-items: center;
gap: 0.3rem; gap: 0.3rem;
padding: 0.5rem 0.6rem; padding: 0.5rem 0.6rem;
border-bottom: 1px solid var(--color-border); border-bottom: 1px solid var(--fs-border-color);
flex-shrink: 0; flex-shrink: 0;
} }
.rail-title { .rail-title {
color: var(--color-text-muted); color: var(--fs-text-tertiary);
text-transform: uppercase; text-transform: uppercase;
letter-spacing: 0.04em; letter-spacing: 0.04em;
font-size: 0.72rem; font-size: 0.72rem;
@@ -490,7 +490,7 @@ defineExpose({ reload: loadProjectNotes });
background: transparent; background: transparent;
border: none; border: none;
font-size: 0.78rem; font-size: 0.78rem;
color: var(--color-text); color: var(--fs-text-primary);
min-width: 0; min-width: 0;
padding: 0; padding: 0;
} }
@@ -503,7 +503,7 @@ defineExpose({ reload: loadProjectNotes });
.rail-state { .rail-state {
padding: 1rem 0.65rem; padding: 1rem 0.65rem;
font-size: 0.78rem; font-size: 0.78rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
} }
/* Note list */ /* Note list */
@@ -519,16 +519,16 @@ defineExpose({ reload: loadProjectNotes });
display: flex; display: flex;
flex-direction: column; flex-direction: column;
padding: 0.4rem 0.6rem; 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; cursor: pointer;
gap: 0.15rem; gap: 0.15rem;
border-right: 2px solid transparent; border-right: 2px solid transparent;
transition: background 0.12s; 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 { .note-row.active {
background: color-mix(in srgb, var(--color-primary) 8%, var(--color-surface)); background: color-mix(in srgb, var(--fs-accent) 8%, var(--fs-surface-hover));
border-right-color: var(--color-primary); border-right-color: var(--fs-accent);
} }
.note-row-main { .note-row-main {
@@ -544,12 +544,12 @@ defineExpose({ reload: loadProjectNotes });
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
white-space: nowrap; white-space: nowrap;
color: var(--color-text); color: var(--fs-text-primary);
} }
.note-row-age { .note-row-age {
font-size: 0.62rem; font-size: 0.62rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
white-space: nowrap; white-space: nowrap;
flex-shrink: 0; flex-shrink: 0;
} }
@@ -562,8 +562,8 @@ defineExpose({ reload: loadProjectNotes });
.note-tag-pill { .note-tag-pill {
font-size: 0.58rem; font-size: 0.58rem;
color: var(--color-primary); color: var(--fs-accent);
background: color-mix(in srgb, var(--color-primary) 10%, transparent); background: color-mix(in srgb, var(--fs-accent) 10%, transparent);
border-radius: 999px; border-radius: 999px;
padding: 0 0.3rem; padding: 0 0.3rem;
white-space: nowrap; white-space: nowrap;
@@ -572,13 +572,13 @@ defineExpose({ reload: loadProjectNotes });
max-width: 5rem; max-width: 5rem;
} }
.note-tag-pill.tag-match { .note-tag-pill.tag-match {
background: color-mix(in srgb, var(--color-primary) 22%, transparent); background: color-mix(in srgb, var(--fs-accent) 22%, transparent);
outline: 1px solid var(--color-primary); outline: 1px solid var(--fs-accent);
} }
.note-tag-more { .note-tag-more {
font-size: 0.58rem; font-size: 0.58rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
white-space: nowrap; white-space: nowrap;
} }
@@ -606,8 +606,8 @@ defineExpose({ reload: loadProjectNotes });
margin-left: auto; margin-left: auto;
} }
.unsaved { font-size: 0.72rem; color: var(--color-text-muted); } .unsaved { font-size: 0.72rem; color: var(--fs-text-tertiary); }
.saving-txt { font-size: 0.72rem; color: var(--color-primary); } .saving-txt { font-size: 0.72rem; color: var(--fs-accent); }
/* Moss action-primary per Hybrid */ /* Moss action-primary per Hybrid */
@@ -618,14 +618,14 @@ defineExpose({ reload: loadProjectNotes });
font-size: 1.4rem; font-size: 1.4rem;
font-weight: 500; font-weight: 500;
line-height: 1.25; line-height: 1.25;
color: var(--color-text); color: var(--fs-text-primary);
padding: 0; padding: 0;
font-family: 'Fraunces', serif; font-family: 'Fraunces', serif;
letter-spacing: -0.01em; letter-spacing: -0.01em;
} }
.note-title-input:focus { outline: none; } .note-title-input:focus { outline: none; }
.note-title-input::placeholder { .note-title-input::placeholder {
color: var(--color-text-muted); color: var(--fs-text-tertiary);
} }
.tag-row { .tag-row {
@@ -645,25 +645,25 @@ defineExpose({ reload: loadProjectNotes });
align-items: center; align-items: center;
gap: 0.3rem; gap: 0.3rem;
padding: 0.35rem 0.6rem; 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; 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 { .btn-tag-suggestion {
background: none; background: none;
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: 999px; border-radius: 999px;
padding: 0.15rem 0.55rem; padding: 0.15rem 0.55rem;
font-size: 0.75rem; font-size: 0.75rem;
color: var(--color-text); color: var(--fs-text-primary);
cursor: pointer; 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 { .btn-tag-suggestion.applied {
background: color-mix(in srgb, var(--color-primary) 15%, transparent); background: color-mix(in srgb, var(--fs-accent) 15%, transparent);
border-color: var(--color-primary); border-color: var(--fs-accent);
color: var(--color-primary); color: var(--fs-accent);
} }
@@ -673,12 +673,12 @@ defineExpose({ reload: loadProjectNotes });
flex-wrap: wrap; flex-wrap: wrap;
gap: 0.25rem; gap: 0.25rem;
padding: 0.3rem 0.6rem; 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; flex-shrink: 0;
} }
.link-suggest-label { .link-suggest-label {
font-size: 0.7rem; font-size: 0.7rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
flex-shrink: 0; flex-shrink: 0;
font-weight: 500; font-weight: 500;
text-transform: uppercase; text-transform: uppercase;
@@ -688,15 +688,15 @@ defineExpose({ reload: loadProjectNotes });
.btn-chip-link { .btn-chip-link {
background: none; background: none;
border: 1px solid var(--color-primary); border: 1px solid var(--fs-accent);
border-radius: 999px; border-radius: 999px;
padding: 0.1rem 0.45rem; padding: 0.1rem 0.45rem;
font-size: 0.7rem; font-size: 0.7rem;
color: var(--color-primary); color: var(--fs-accent);
cursor: pointer; cursor: pointer;
font-family: monospace; font-family: monospace;
white-space: nowrap; 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); }
</style> </style>
+48 -48
View File
@@ -344,8 +344,8 @@ defineExpose({ reload: loadAll });
flex-direction: column; flex-direction: column;
height: 100%; height: 100%;
overflow: hidden; overflow: hidden;
background: var(--color-surface); background: var(--fs-surface-hover);
border-right: 1px solid var(--color-border); border-right: 1px solid var(--fs-border-color);
} }
/* ── List view ── */ /* ── List view ── */
@@ -360,17 +360,17 @@ defineExpose({ reload: loadAll });
flex: 0 0 44%; flex: 0 0 44%;
} }
.task-active { .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 { .panel-header {
padding: 0.6rem 0.75rem; padding: 0.6rem 0.75rem;
border-bottom: 1px solid var(--color-border); border-bottom: 1px solid var(--fs-border-color);
flex-shrink: 0; flex-shrink: 0;
} }
.panel-title { .panel-title {
color: var(--color-text-muted); color: var(--fs-text-tertiary);
text-transform: uppercase; text-transform: uppercase;
letter-spacing: 0.04em; letter-spacing: 0.04em;
font-size: 0.75rem; font-size: 0.75rem;
@@ -381,20 +381,20 @@ defineExpose({ reload: loadAll });
display: flex; display: flex;
gap: 0.4rem; gap: 0.4rem;
padding: 0.45rem 0.6rem; padding: 0.45rem 0.6rem;
border-bottom: 1px solid var(--color-border); border-bottom: 1px solid var(--fs-border-color);
flex-shrink: 0; flex-shrink: 0;
} }
.task-add-input { .task-add-input {
flex: 1; flex: 1;
background: var(--color-input-bg); background: var(--fs-surface-page);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: 5px; border-radius: 5px;
padding: 0.28rem 0.5rem; padding: 0.28rem 0.5rem;
font-size: 0.83rem; 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 */ .btn-add { font-size: 1rem; } /* a '+' glyph, not a label */
@@ -404,7 +404,7 @@ defineExpose({ reload: loadAll });
} }
.ms-group { .ms-group {
border-bottom: 1px solid var(--color-border); border-bottom: 1px solid var(--fs-border-color);
} }
.ms-group-header { .ms-group-header {
@@ -413,18 +413,18 @@ defineExpose({ reload: loadAll });
gap: 0.4rem; gap: 0.4rem;
width: 100%; width: 100%;
padding: 0.4rem 0.65rem; padding: 0.4rem 0.65rem;
background: var(--color-surface-raised); background: var(--fs-surface-raised);
border: none; border: none;
cursor: pointer; cursor: pointer;
text-align: left; text-align: left;
font-size: 0.8rem; 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-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 { .ms-status {
font-size: 0.68rem; font-size: 0.68rem;
@@ -432,8 +432,8 @@ defineExpose({ reload: loadAll });
border-radius: 10px; border-radius: 10px;
text-transform: capitalize; text-transform: capitalize;
} }
.ms-status-active { background: color-mix(in srgb, var(--color-primary) 15%, transparent); color: var(--color-primary); } .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(--color-success) 15%, transparent); color: var(--color-success); } .ms-status-completed { background: color-mix(in srgb, var(--fs-success) 15%, transparent); color: var(--fs-success); }
.task-items { .task-items {
list-style: none; list-style: none;
@@ -447,9 +447,9 @@ defineExpose({ reload: loadAll });
gap: 0.4rem; gap: 0.4rem;
padding: 0.35rem 0.65rem 0.35rem 1.4rem; padding: 0.35rem 0.65rem 0.35rem 1.4rem;
cursor: pointer; 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; } .task-row:last-child { border-bottom: none; }
.status-dot { .status-dot {
@@ -457,7 +457,7 @@ defineExpose({ reload: loadAll });
width: 1.35rem; width: 1.35rem;
height: 1.35rem; height: 1.35rem;
border-radius: 50%; border-radius: 50%;
border: 1.5px solid var(--color-border); border: 1.5px solid var(--fs-border-color);
background: none; background: none;
cursor: pointer; cursor: pointer;
font-size: 0.62rem; font-size: 0.62rem;
@@ -465,8 +465,8 @@ defineExpose({ reload: loadAll });
align-items: center; align-items: center;
justify-content: center; justify-content: center;
} }
.status-dot.status-in_progress { border-color: var(--color-primary); color: var(--color-primary); } .status-dot.status-in_progress { border-color: var(--fs-accent); color: var(--fs-accent); }
.status-dot.status-done { border-color: var(--color-success); color: var(--color-success); } .status-dot.status-done { border-color: var(--fs-success); color: var(--fs-success); }
.task-title { .task-title {
flex: 1; flex: 1;
@@ -474,20 +474,20 @@ defineExpose({ reload: loadAll });
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
white-space: nowrap; 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 { .task-age {
font-size: 0.68rem; font-size: 0.68rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
white-space: nowrap; white-space: nowrap;
flex-shrink: 0; 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) ── */ /* ── Detail pane (bottom split) ── */
.task-detail { .task-detail {
@@ -496,8 +496,8 @@ defineExpose({ reload: loadAll });
display: flex; display: flex;
flex-direction: column; flex-direction: column;
overflow: hidden; overflow: hidden;
background: var(--color-surface); background: var(--fs-surface-hover);
border-top: 2px solid var(--color-border); border-top: 2px solid var(--fs-border-color);
} }
.detail-header { .detail-header {
@@ -505,7 +505,7 @@ defineExpose({ reload: loadAll });
align-items: center; align-items: center;
gap: 0.6rem; gap: 0.6rem;
padding: 0.6rem 0.75rem; padding: 0.6rem 0.75rem;
border-bottom: 1px solid var(--color-border); border-bottom: 1px solid var(--fs-border-color);
flex-shrink: 0; flex-shrink: 0;
} }
@@ -515,21 +515,21 @@ defineExpose({ reload: loadAll });
font-size: 0.75rem; font-size: 0.75rem;
font-weight: 500; font-weight: 500;
cursor: pointer; cursor: pointer;
border: 1.5px solid var(--color-border); border: 1.5px solid var(--fs-border-color);
background: none; background: none;
text-transform: capitalize; text-transform: capitalize;
user-select: none; user-select: none;
margin-left: auto; 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-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(--color-success); color: var(--color-success); background: color-mix(in srgb, var(--color-success) 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 { margin-left: 0.25rem; }
.btn-edit-task:hover { text-decoration: underline; } .btn-edit-task:hover { text-decoration: underline; }
.detail-body { .detail-body {
padding: 0.5rem 0.75rem 0.5rem; 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; flex-shrink: 0;
max-height: 40%; max-height: 40%;
overflow-y: auto; overflow-y: auto;
@@ -537,17 +537,17 @@ defineExpose({ reload: loadAll });
.body-loading { .body-loading {
font-size: 0.8rem; font-size: 0.8rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
} }
.detail-body .prose { .detail-body .prose {
font-size: 0.83rem; font-size: 0.83rem;
line-height: 1.5; line-height: 1.5;
color: var(--color-text); color: var(--fs-text-primary);
} }
.btn-delete-task { margin-left: 0.25rem; } .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; } .btn-delete-confirm { margin-left: 0.25rem; }
@@ -563,9 +563,9 @@ defineExpose({ reload: loadAll });
font-size: 0.72rem; font-size: 0.72rem;
padding: 0.15rem 0.5rem; padding: 0.15rem 0.5rem;
border-radius: 10px; border-radius: 10px;
background: var(--color-bg); background: var(--fs-surface-page);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
color: var(--color-text-muted); color: var(--fs-text-tertiary);
text-transform: capitalize; text-transform: capitalize;
} }
@@ -573,20 +573,20 @@ defineExpose({ reload: loadAll });
font-size: 0.72rem; font-size: 0.72rem;
padding: 0.15rem 0.4rem; padding: 0.15rem 0.4rem;
border-radius: 10px; border-radius: 10px;
background: var(--color-bg); background: var(--fs-surface-page);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
color: var(--color-text-muted); color: var(--fs-text-tertiary);
cursor: pointer; cursor: pointer;
max-width: 140px; max-width: 140px;
} }
.milestone-select:disabled { opacity: 0.5; cursor: default; } .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 { .detail-log {
flex: 1; flex: 1;
overflow-y: auto; overflow-y: auto;
padding: 0 0.6rem 0.6rem; padding: 0 0.6rem 0.6rem;
border-top: 1px solid var(--color-border); border-top: 1px solid var(--fs-border-color);
} }
/* Detail fade transition */ /* Detail fade transition */
@@ -609,12 +609,12 @@ defineExpose({ reload: loadAll });
/* Due date on task rows */ /* Due date on task rows */
.task-due { .task-due {
font-size: 0.65rem; font-size: 0.65rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
white-space: nowrap; white-space: nowrap;
flex-shrink: 0; flex-shrink: 0;
} }
.task-due.overdue { .task-due.overdue {
color: var(--color-danger); color: var(--fs-error);
font-weight: 500; font-weight: 500;
} }
@@ -46,7 +46,7 @@ watch(() => props.projectId, load);
<style scoped> <style scoped>
.plan-rules { .plan-rules {
margin-top: 1.5rem; margin-top: 1.5rem;
border-top: 1px solid var(--color-border); border-top: 1px solid var(--fs-border-color);
padding-top: 1rem; padding-top: 1rem;
} }
.plan-rules h3 { .plan-rules h3 {
@@ -66,7 +66,7 @@ watch(() => props.projectId, load);
} }
.plan-rules ul { .plan-rules ul {
list-style: none; padding-left: 0.75rem; margin: 0.25rem 0; list-style: none; padding-left: 0.75rem; margin: 0.25rem 0;
border-left: 2px solid var(--color-primary); border-left: 2px solid var(--fs-accent);
} }
.plan-rules li { margin: 0.35rem 0; font-size: 0.92em; } .plan-rules li { margin: 0.35rem 0; font-size: 0.92em; }
.truncated { opacity: 0.7; font-style: italic; font-size: 0.85em; } .truncated { opacity: 0.7; font-style: italic; font-size: 0.85em; }
@@ -329,7 +329,7 @@ h3 {
.chips { display: flex; gap: 0.5rem; flex-wrap: wrap; align-items: center; } .chips { display: flex; gap: 0.5rem; flex-wrap: wrap; align-items: center; }
.chip { .chip {
display: inline-flex; align-items: center; gap: 0.25rem; display: inline-flex; align-items: center; gap: 0.25rem;
background: var(--color-primary-bg); background: var(--fs-accent-soft);
padding: 0.25rem 0.5rem; border-radius: 999px; padding: 0.25rem 0.5rem; border-radius: 999px;
} }
.chip a { cursor: pointer; } .chip a { cursor: pointer; }
@@ -337,13 +337,13 @@ h3 {
.chip-remove:hover { opacity: 1; } .chip-remove:hover { opacity: 1; }
.add { .add {
background: none; background: none;
border: 1px dashed var(--color-border); border: 1px dashed var(--fs-border-color);
padding: 0.25rem 0.75rem; border-radius: 999px; cursor: pointer; padding: 0.25rem 0.75rem; border-radius: 999px; cursor: pointer;
color: inherit; color: inherit;
} }
select { select {
background: var(--color-bg); color: inherit; background: var(--fs-surface-page); color: inherit;
border: 1px solid var(--color-border); border-radius: 6px; border: 1px solid var(--fs-border-color); border-radius: 6px;
padding: 0.25rem 0.5rem; padding: 0.25rem 0.5rem;
} }
.applicable { margin-top: 2rem; } .applicable { margin-top: 2rem; }
@@ -359,7 +359,7 @@ select {
} }
ul { list-style: none; padding: 0; margin: 0; } ul { list-style: none; padding: 0; margin: 0; }
.rule { .rule {
border-left: 2px solid var(--color-primary); border-left: 2px solid var(--fs-accent);
padding-left: 0.75rem; margin: 0.5rem 0; padding-left: 0.75rem; margin: 0.5rem 0;
} }
.rule-head { cursor: pointer; } .rule-head { cursor: pointer; }
@@ -367,12 +367,12 @@ ul { list-style: none; padding: 0; margin: 0; }
.rule-statement { display: block; opacity: 0.85; margin-top: 0.25rem; } .rule-statement { display: block; opacity: 0.85; margin-top: 0.25rem; }
.rule-detail { .rule-detail {
margin-top: 0.5rem; padding: 0.5rem; margin-top: 0.5rem; padding: 0.5rem;
background: var(--color-bg); border-radius: 6px; background: var(--fs-surface-page); border-radius: 6px;
} }
.rule-detail > div { margin-bottom: 0.5rem; } .rule-detail > div { margin-bottom: 0.5rem; }
.edit-link { .edit-link {
background: none; border: none; cursor: pointer; background: none; border: none; cursor: pointer;
color: var(--color-primary); padding: 0.5rem 0 0 0; color: var(--fs-accent); padding: 0.5rem 0 0 0;
} }
.empty, .truncated { opacity: 0.7; font-style: italic; } .empty, .truncated { opacity: 0.7; font-style: italic; }
.empty a { cursor: pointer; text-decoration: underline; } .empty a { cursor: pointer; text-decoration: underline; }
@@ -381,18 +381,18 @@ ul { list-style: none; padding: 0; margin: 0; }
.new-rule-form { .new-rule-form {
display: flex; flex-direction: column; gap: 0.5rem; display: flex; flex-direction: column; gap: 0.5rem;
padding: 0.75rem; margin: 0.5rem 0; padding: 0.75rem; margin: 0.5rem 0;
background: var(--color-bg); background: var(--fs-surface-page);
border: 1px solid var(--color-border); border-radius: 6px; border: 1px solid var(--fs-border-color); border-radius: 6px;
} }
.new-rule-form input, .new-rule-form textarea { .new-rule-form input, .new-rule-form textarea {
background: var(--color-surface); color: inherit; background: var(--fs-surface-hover); color: inherit;
border: 1px solid var(--color-border); border-radius: 6px; border: 1px solid var(--fs-border-color); border-radius: 6px;
padding: 0.5rem; font: inherit; resize: vertical; padding: 0.5rem; font: inherit; resize: vertical;
} }
.rule-list { margin-top: 0.5rem; } .rule-list { margin-top: 0.5rem; }
.delete-link { .delete-link {
background: none; border: none; cursor: pointer; background: none; border: none; cursor: pointer;
color: var(--color-destructive); padding: 0.5rem 0 0 0; color: var(--fs-destructive); padding: 0.5rem 0 0 0;
} }
/* Per-rule / per-topic suppress affordance — quiet by default, reveal on hover */ /* Per-rule / per-topic suppress affordance — quiet by default, reveal on hover */
.topic-group h5 { .topic-group h5 {
@@ -404,14 +404,14 @@ ul { list-style: none; padding: 0; margin: 0; }
.rule-head-text { flex: 1; cursor: pointer; } .rule-head-text { flex: 1; cursor: pointer; }
.skip-btn { .skip-btn {
background: none; border: none; cursor: pointer; background: none; border: none; cursor: pointer;
color: var(--color-muted); font-size: 0.75rem; color: var(--fs-text-tertiary); font-size: 0.75rem;
padding: 0.1rem 0.4rem; opacity: 0; transition: opacity 0.15s; padding: 0.1rem 0.4rem; opacity: 0; transition: opacity 0.15s;
white-space: nowrap; white-space: nowrap;
} }
.topic-group h5:hover .skip-btn, .topic-group h5:hover .skip-btn,
.rule:hover .skip-btn, .rule:hover .skip-btn,
.skip-btn:focus { opacity: 1; } .skip-btn:focus { opacity: 1; }
.skip-btn:hover { color: var(--color-destructive); } .skip-btn:hover { color: var(--fs-destructive); }
/* Suppressed section */ /* Suppressed section */
.suppressed { margin-top: 1.5rem; } .suppressed { margin-top: 1.5rem; }
.suppressed-toggle { .suppressed-toggle {
@@ -430,13 +430,13 @@ ul { list-style: none; padding: 0; margin: 0; }
.suppressed-kind { .suppressed-kind {
font-size: 0.7em; text-transform: uppercase; letter-spacing: 0.05em; font-size: 0.7em; text-transform: uppercase; letter-spacing: 0.05em;
padding: 0.1rem 0.4rem; border-radius: 3px; padding: 0.1rem 0.4rem; border-radius: 3px;
background: var(--color-bg); background: var(--fs-surface-page);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
} }
.suppressed-path { flex: 1; } .suppressed-path { flex: 1; }
.reenable-btn { .reenable-btn {
background: none; border: none; cursor: pointer; background: none; border: none; cursor: pointer;
color: var(--color-primary); font-size: 0.85em; color: var(--fs-accent); font-size: 0.85em;
} }
.reenable-btn:hover { text-decoration: underline; } .reenable-btn:hover { text-decoration: underline; }
</style> </style>
@@ -98,8 +98,8 @@ watch(() => props.ruleId, load);
.slide-over { .slide-over {
position: fixed; top: 0; right: 0; bottom: 0; position: fixed; top: 0; right: 0; bottom: 0;
width: min(520px, 90vw); width: min(520px, 90vw);
background: var(--color-surface); background: var(--fs-surface-hover);
border-left: 2px solid var(--color-primary); border-left: 2px solid var(--fs-accent);
padding: 1.5rem; padding: 1.5rem;
overflow-y: auto; overflow-y: auto;
box-shadow: -8px 0 32px rgba(0, 0, 0, 0.3); box-shadow: -8px 0 32px rgba(0, 0, 0, 0.3);
@@ -110,11 +110,11 @@ header h2 {
font-family: Fraunces, serif; font-style: italic; font-family: Fraunces, serif; font-style: italic;
} }
label { display: block; margin-bottom: 1rem; } label { display: block; margin-bottom: 1rem; }
.required { color: var(--color-primary); } .required { color: var(--fs-accent); }
input, textarea { input, textarea {
width: 100%; margin-top: 0.25rem; width: 100%; margin-top: 0.25rem;
background: var(--color-bg); color: inherit; background: var(--fs-surface-page); color: inherit;
border: 1px solid var(--color-border); border-radius: 6px; border: 1px solid var(--fs-border-color); border-radius: 6px;
padding: 0.5rem; font: inherit; padding: 0.5rem; font: inherit;
font-family: inherit; font-family: inherit;
} }
@@ -22,18 +22,18 @@ const emit = defineEmits<{
</template> </template>
<style scoped> <style scoped>
.pane { background: var(--color-surface); padding: 1rem; overflow-y: auto; } .pane { background: var(--fs-surface-hover); padding: 1rem; overflow-y: auto; }
header h2 { font-family: Fraunces, serif; font-style: italic; margin: 0 0 0.5rem 0; } header h2 { font-family: Fraunces, serif; font-style: italic; margin: 0 0 0.5rem 0; }
ul { list-style: none; padding: 0; margin: 1rem 0; } ul { list-style: none; padding: 0; margin: 1rem 0; }
li { li {
padding: 0.75rem; padding: 0.75rem;
cursor: pointer; cursor: pointer;
border-radius: 6px; border-radius: 6px;
border-left: 2px solid var(--color-primary); border-left: 2px solid var(--fs-accent);
margin-bottom: 0.5rem; margin-bottom: 0.5rem;
background: rgba(255, 255, 255, 0.02); background: rgba(255, 255, 255, 0.02);
} }
li:hover { background: var(--color-hover); } li:hover { background: var(--fs-surface-hover); }
.title { font-family: Fraunces, serif; font-style: italic; font-size: 1.05em; } .title { font-family: Fraunces, serif; font-style: italic; font-size: 1.05em; }
.statement { font-size: 0.9em; opacity: 0.8; margin-top: 0.25rem; } .statement { font-size: 0.9em; opacity: 0.8; margin-top: 0.25rem; }
.new-rule { cursor: pointer; } .new-rule { cursor: pointer; }
@@ -122,7 +122,7 @@ watch(() => props.rulebookId, () => {/* re-render of isSubscribed from existing
</template> </template>
<style scoped> <style scoped>
.pane { background: var(--color-surface); padding: 1rem; overflow-y: auto; } .pane { background: var(--fs-surface-hover); padding: 1rem; overflow-y: auto; }
header { display: flex; align-items: center; justify-content: space-between; gap: 1rem; } header { display: flex; align-items: center; justify-content: space-between; gap: 1rem; }
header h2 { font-family: Fraunces, serif; font-style: italic; margin: 0 0 0.5rem 0; } header h2 { font-family: Fraunces, serif; font-style: italic; margin: 0 0 0.5rem 0; }
.always-on-toggle { .always-on-toggle {
@@ -133,8 +133,8 @@ header h2 { font-family: Fraunces, serif; font-style: italic; margin: 0 0 0.5rem
.always-on-toggle input { cursor: pointer; } .always-on-toggle input { cursor: pointer; }
ul { list-style: none; padding: 0; margin: 1rem 0; } ul { list-style: none; padding: 0; margin: 1rem 0; }
li { padding: 0.5rem; cursor: pointer; border-radius: 6px; } li { padding: 0.5rem; cursor: pointer; border-radius: 6px; }
li.active { background: var(--color-primary-bg); } li.active { background: var(--fs-accent-soft); }
li:hover { background: var(--color-hover); } li:hover { background: var(--fs-surface-hover); }
/* `.new-topic` and `.sub-list` are deliberately bare (#2444). The first wraps a /* `.new-topic` and `.sub-list` are deliberately bare (#2444). The first wraps a
button-or-form whose children style themselves; the second is a `<ul>`, and button-or-form whose children style themselves; the second is a `<ul>`, and
the bare `ul` rule above already gives it list-style, padding and margin — the bare `ul` rule above already gives it list-style, padding and margin —
@@ -142,14 +142,14 @@ li:hover { background: var(--color-hover); }
selector. Both namespace descendant rules and assume nothing about layout. */ selector. Both namespace descendant rules and assume nothing about layout. */
.new-topic input { .new-topic input {
width: 100%; margin-bottom: 0.5rem; width: 100%; margin-bottom: 0.5rem;
background: var(--color-bg); color: inherit; background: var(--fs-surface-page); color: inherit;
border: 1px solid var(--color-border); border-radius: 6px; border: 1px solid var(--fs-border-color); border-radius: 6px;
padding: 0.5rem; padding: 0.5rem;
} }
.form-buttons { display: flex; gap: 0.5rem; } .form-buttons { display: flex; gap: 0.5rem; }
.subscriptions { .subscriptions {
margin-top: 2rem; margin-top: 2rem;
border-top: 1px solid var(--color-border); border-top: 1px solid var(--fs-border-color);
padding-top: 1rem; padding-top: 1rem;
} }
.subscriptions h3 { font-size: 0.9em; opacity: 0.7; text-transform: uppercase; letter-spacing: 0.05em; } .subscriptions h3 { font-size: 0.9em; opacity: 0.7; text-transform: uppercase; letter-spacing: 0.05em; }
@@ -48,27 +48,27 @@ async function submitNew() {
</template> </template>
<style scoped> <style scoped>
.pane { background: var(--color-surface); padding: 1rem; overflow-y: auto; } .pane { background: var(--fs-surface-hover); padding: 1rem; overflow-y: auto; }
header h2 { font-family: Fraunces, serif; font-style: italic; margin: 0 0 0.5rem 0; } header h2 { font-family: Fraunces, serif; font-style: italic; margin: 0 0 0.5rem 0; }
ul { list-style: none; padding: 0; margin: 1rem 0; } ul { list-style: none; padding: 0; margin: 1rem 0; }
li { padding: 0.5rem; cursor: pointer; border-radius: 6px; display: flex; align-items: center; gap: 0.5rem; } li { padding: 0.5rem; cursor: pointer; border-radius: 6px; display: flex; align-items: center; gap: 0.5rem; }
li.active { background: var(--color-primary-bg); } li.active { background: var(--fs-accent-soft); }
li:hover { background: var(--color-hover); } li:hover { background: var(--fs-surface-hover); }
.always-on-badge { .always-on-badge {
font-size: 0.7rem; font-size: 0.7rem;
text-transform: uppercase; text-transform: uppercase;
letter-spacing: 0.05em; letter-spacing: 0.05em;
padding: 0.1rem 0.4rem; padding: 0.1rem 0.4rem;
border-radius: 3px; border-radius: 3px;
background: var(--color-accent); background: var(--fs-accent);
color: var(--color-accent-fg); color: var(--fs-text-on-action);
margin-left: auto; margin-left: auto;
} }
.new-rulebook { margin-top: 1rem; } .new-rulebook { margin-top: 1rem; }
.new-rulebook input { .new-rulebook input {
width: 100%; margin-bottom: 0.5rem; width: 100%; margin-bottom: 0.5rem;
background: var(--color-bg); color: inherit; background: var(--fs-surface-page); color: inherit;
border: 1px solid var(--color-border); border-radius: 6px; border: 1px solid var(--fs-border-color); border-radius: 6px;
padding: 0.5rem; padding: 0.5rem;
} }
.form-buttons { display: flex; gap: 0.5rem; } .form-buttons { display: flex; gap: 0.5rem; }
+3 -3
View File
@@ -1,10 +1,10 @@
/** Cyclic color palette for milestone progress bars. */ /** Cyclic color palette for milestone progress bars. */
export const MILESTONE_PALETTE = [ export const MILESTONE_PALETTE = [
'var(--color-primary)', 'var(--fs-accent)',
'var(--color-success, #22c55e)', 'var(--fs-success, #22c55e)',
'#c98a00', '#c98a00',
'#8b5cf6', '#8b5cf6',
'var(--color-danger, #ef4444)', 'var(--fs-error, #ef4444)',
'#06b6d4', '#06b6d4',
] ]
+38 -38
View File
@@ -79,7 +79,7 @@ onMounted(async () => {
<article v-for="p in data.active_projects" :key="p.id" class="proj-panel"> <article v-for="p in data.active_projects" :key="p.id" class="proj-panel">
<header class="proj-head"> <header class="proj-head">
<span class="proj-dot" :style="{ background: p.color || 'var(--color-primary)' }" /> <span class="proj-dot" :style="{ background: p.color || 'var(--fs-accent)' }" />
<router-link :to="`/projects/${p.id}`" class="proj-title">{{ p.title }}</router-link> <router-link :to="`/projects/${p.id}`" class="proj-title">{{ p.title }}</router-link>
<span class="proj-meta">{{ relativeTime(p.last_activity) }} · {{ p.open_count }} open</span> <span class="proj-meta">{{ relativeTime(p.last_activity) }} · {{ p.open_count }} open</span>
</header> </header>
@@ -156,7 +156,7 @@ onMounted(async () => {
:to="`/projects/${p.id}`" :to="`/projects/${p.id}`"
class="pstat-row" class="pstat-row"
> >
<span class="pstat-dot" :style="{ background: p.color || 'var(--color-primary)' }" /> <span class="pstat-dot" :style="{ background: p.color || 'var(--fs-accent)' }" />
<span class="pstat-title">{{ p.title }}</span> <span class="pstat-title">{{ p.title }}</span>
<span class="pstat-counts">{{ p.open_count }} open · {{ p.done_count }} done</span> <span class="pstat-counts">{{ p.open_count }} open · {{ p.done_count }} done</span>
</router-link> </router-link>
@@ -180,68 +180,68 @@ onMounted(async () => {
all the spacing between them (h1 zeroed, .dash-sub margined). Nothing in it all the spacing between them (h1 zeroed, .dash-sub margined). Nothing in it
assumes a flex parent, which is the tell for a deleted rule (#2444). */ assumes a flex parent, which is the tell for a deleted rule (#2444). */
.dash-head h1 { margin: 0; font-family: 'Fraunces', Georgia, serif; } .dash-head h1 { margin: 0; font-family: 'Fraunces', Georgia, serif; }
.dash-sub { margin: 0.2rem 0 1.25rem; color: var(--color-muted); font-size: 0.9rem; } .dash-sub { margin: 0.2rem 0 1.25rem; color: var(--fs-text-tertiary); font-size: 0.9rem; }
.dash-label { display: block; font-size: 0.72rem; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; color: var(--color-muted); margin-bottom: 0.6rem; } .dash-label { display: block; font-size: 0.72rem; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; color: var(--fs-text-tertiary); margin-bottom: 0.6rem; }
.dash-empty { color: var(--color-muted); padding: 1rem 0; } .dash-empty { color: var(--fs-text-tertiary); padding: 1rem 0; }
.dash-empty.card { padding: 1rem; border: 1px dashed var(--color-border); border-radius: 10px; } .dash-empty.card { padding: 1rem; border: 1px dashed var(--fs-border-color); border-radius: 10px; }
.done-recent { margin-bottom: 1.5rem; } .done-recent { margin-bottom: 1.5rem; }
.done-row { display: flex; align-items: center; gap: 0.5rem; padding: 0.35rem 0.55rem; border-radius: 7px; text-decoration: none; color: var(--color-text); font-size: 0.86rem; } .done-row { display: flex; align-items: center; gap: 0.5rem; padding: 0.35rem 0.55rem; border-radius: 7px; text-decoration: none; color: var(--fs-text-primary); font-size: 0.86rem; }
.done-row:hover { background: var(--color-hover); } .done-row:hover { background: var(--fs-surface-hover); }
.done-mark { color: var(--color-primary); flex-shrink: 0; } .done-mark { color: var(--fs-accent); flex-shrink: 0; }
.done-title { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .done-title { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.done-meta { font-size: 0.72rem; color: var(--color-muted); white-space: nowrap; flex-shrink: 0; } .done-meta { font-size: 0.72rem; color: var(--fs-text-tertiary); white-space: nowrap; flex-shrink: 0; }
.done-more { background: none; border: none; cursor: pointer; margin-top: 0.25rem; padding: 0.2rem 0.55rem; font-size: 0.78rem; color: var(--color-primary); font-family: inherit; } .done-more { background: none; border: none; cursor: pointer; margin-top: 0.25rem; padding: 0.2rem 0.55rem; font-size: 0.78rem; color: var(--fs-accent); font-family: inherit; }
.done-more:hover { text-decoration: underline; } .done-more:hover { text-decoration: underline; }
.dash-cols { display: flex; gap: 1.25rem; align-items: flex-start; } .dash-cols { display: flex; gap: 1.25rem; align-items: flex-start; }
.dash-main { flex: 1.7; min-width: 0; } .dash-main { flex: 1.7; min-width: 0; }
.dash-rail { flex: 1; min-width: 240px; } .dash-rail { flex: 1; min-width: 240px; }
.proj-panel { background: var(--color-surface); border: 1px solid var(--color-border); border-radius: 12px; padding: 0.9rem 1rem; margin-bottom: 0.9rem; } .proj-panel { background: var(--fs-surface-hover); border: 1px solid var(--fs-border-color); border-radius: 12px; padding: 0.9rem 1rem; margin-bottom: 0.9rem; }
.proj-head { display: flex; align-items: center; gap: 0.5rem; } .proj-head { display: flex; align-items: center; gap: 0.5rem; }
.proj-dot { width: 9px; height: 9px; border-radius: 50%; flex-shrink: 0; } .proj-dot { width: 9px; height: 9px; border-radius: 50%; flex-shrink: 0; }
.proj-title { font-weight: 700; color: var(--color-text); text-decoration: none; } .proj-title { font-weight: 700; color: var(--fs-text-primary); text-decoration: none; }
.proj-title:hover { color: var(--color-primary); } .proj-title:hover { color: var(--fs-accent); }
.proj-meta { margin-left: auto; font-size: 0.74rem; color: var(--color-muted); } .proj-meta { margin-left: auto; font-size: 0.74rem; color: var(--fs-text-tertiary); }
.bar { height: 5px; background: var(--color-border); border-radius: 3px; margin: 0.55rem 0 0.2rem; } .bar { height: 5px; background: var(--fs-border-color); border-radius: 3px; margin: 0.55rem 0 0.2rem; }
.bar-fill { height: 5px; background: var(--color-primary); border-radius: 3px; } .bar-fill { height: 5px; background: var(--fs-accent); border-radius: 3px; }
.ms-block { margin-top: 0.7rem; } .ms-block { margin-top: 0.7rem; }
.ms-head { display: flex; align-items: baseline; gap: 0.5rem; margin-bottom: 0.3rem; } .ms-head { display: flex; align-items: baseline; gap: 0.5rem; margin-bottom: 0.3rem; }
.ms-title { font-size: 0.82rem; font-weight: 600; color: var(--color-text); } .ms-title { font-size: 0.82rem; font-weight: 600; color: var(--fs-text-primary); }
.ms-title.ms-none { color: var(--color-muted); font-weight: 500; } .ms-title.ms-none { color: var(--fs-text-tertiary); font-weight: 500; }
.ms-pct { margin-left: auto; font-size: 0.72rem; color: var(--color-muted); } .ms-pct { margin-left: auto; font-size: 0.72rem; color: var(--fs-text-tertiary); }
.task-row { display: flex; align-items: center; gap: 0.5rem; padding: 0.4rem 0.55rem; border-radius: 7px; text-decoration: none; color: var(--color-text); font-size: 0.86rem; } .task-row { display: flex; align-items: center; gap: 0.5rem; padding: 0.4rem 0.55rem; border-radius: 7px; text-decoration: none; color: var(--fs-text-primary); font-size: 0.86rem; }
.task-row:hover { background: var(--color-hover); } .task-row:hover { background: var(--fs-surface-hover); }
.task-inprogress { border-left: 3px solid var(--color-primary); padding-left: calc(0.55rem - 3px); } .task-inprogress { border-left: 3px solid var(--fs-accent); padding-left: calc(0.55rem - 3px); }
.task-mark { color: var(--color-muted); } .task-mark { color: var(--fs-text-tertiary); }
.task-title { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .task-title { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.task-pri { font-size: 0.68rem; text-transform: uppercase; letter-spacing: 0.04em; padding: 1px 6px; border-radius: 8px; border: 1px solid var(--color-border); color: var(--color-muted); } .task-pri { font-size: 0.68rem; text-transform: uppercase; letter-spacing: 0.04em; padding: 1px 6px; border-radius: 8px; border: 1px solid var(--fs-border-color); color: var(--fs-text-tertiary); }
.pri-high { color: #c0556b; border-color: #c0556b66; } .pri-high { color: #c0556b; border-color: #c0556b66; }
.proj-more { display: inline-block; margin-top: 0.6rem; font-size: 0.78rem; color: var(--color-primary); text-decoration: none; } .proj-more { display: inline-block; margin-top: 0.6rem; font-size: 0.78rem; color: var(--fs-accent); text-decoration: none; }
.rail-card { background: var(--color-surface); border: 1px solid var(--color-border); border-radius: 12px; padding: 0.7rem 0.85rem; margin-bottom: 1.25rem; } .rail-card { background: var(--fs-surface-hover); border: 1px solid var(--fs-border-color); border-radius: 12px; padding: 0.7rem 0.85rem; margin-bottom: 1.25rem; }
.stats { display: flex; flex-direction: column; gap: 0.2rem; font-size: 0.9rem; } .stats { display: flex; flex-direction: column; gap: 0.2rem; font-size: 0.9rem; }
.stats-sub { color: var(--color-muted); font-size: 0.78rem; } .stats-sub { color: var(--fs-text-tertiary); font-size: 0.78rem; }
.proj-stats { display: flex; flex-direction: column; gap: 0.1rem; padding: 0.4rem 0.45rem; } .proj-stats { display: flex; flex-direction: column; gap: 0.1rem; padding: 0.4rem 0.45rem; }
.pstat-row { display: flex; align-items: center; gap: 0.5rem; padding: 0.35rem 0.4rem; border-radius: 7px; text-decoration: none; color: var(--color-text); font-size: 0.85rem; } .pstat-row { display: flex; align-items: center; gap: 0.5rem; padding: 0.35rem 0.4rem; border-radius: 7px; text-decoration: none; color: var(--fs-text-primary); font-size: 0.85rem; }
.pstat-row:hover { background: var(--color-hover); } .pstat-row:hover { background: var(--fs-surface-hover); }
.pstat-dot { width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0; } .pstat-dot { width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0; }
.pstat-title { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-weight: 600; } .pstat-title { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-weight: 600; }
.pstat-counts { font-size: 0.74rem; color: var(--color-muted); white-space: nowrap; flex-shrink: 0; } .pstat-counts { font-size: 0.74rem; color: var(--fs-text-tertiary); white-space: nowrap; flex-shrink: 0; }
.quick-add { display: flex; flex-wrap: wrap; gap: 0.4rem; } .quick-add { display: flex; flex-wrap: wrap; gap: 0.4rem; }
.qa-btn { background: var(--color-surface); border: 1px solid var(--color-border); border-radius: 8px; padding: 6px 12px; font-size: 0.82rem; color: var(--color-text); text-decoration: none; } .qa-btn { background: var(--fs-surface-hover); border: 1px solid var(--fs-border-color); border-radius: 8px; padding: 6px 12px; font-size: 0.82rem; color: var(--fs-text-primary); text-decoration: none; }
.qa-btn:hover { border-color: var(--color-primary); color: var(--color-primary); } .qa-btn:hover { border-color: var(--fs-accent); color: var(--fs-accent); }
.issues-card { display: flex; flex-direction: column; gap: 0.1rem; padding: 0.4rem 0.45rem; } .issues-card { display: flex; flex-direction: column; gap: 0.1rem; padding: 0.4rem 0.45rem; }
.issue-row { display: flex; align-items: center; gap: 0.5rem; padding: 0.35rem 0.4rem; border-radius: 7px; text-decoration: none; color: var(--color-text); font-size: 0.85rem; } .issue-row { display: flex; align-items: center; gap: 0.5rem; padding: 0.35rem 0.4rem; border-radius: 7px; text-decoration: none; color: var(--fs-text-primary); font-size: 0.85rem; }
.issue-row:hover { background: var(--color-hover); } .issue-row:hover { background: var(--fs-surface-hover); }
.issue-mark { color: var(--color-muted); flex-shrink: 0; } .issue-mark { color: var(--fs-text-tertiary); flex-shrink: 0; }
.issue-mark.imk-in_progress { color: var(--color-primary); } .issue-mark.imk-in_progress { color: var(--fs-accent); }
.issue-title { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .issue-title { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.issue-meta { font-size: 0.72rem; color: var(--color-muted); white-space: nowrap; flex-shrink: 0; } .issue-meta { font-size: 0.72rem; color: var(--fs-text-tertiary); white-space: nowrap; flex-shrink: 0; }
@media (max-width: 760px) { .dash-cols { flex-direction: column; } } @media (max-width: 760px) { .dash-cols { flex-direction: column; } }
</style> </style>
+55 -55
View File
@@ -1115,7 +1115,7 @@ function isSelfContainedColour(value: string): boolean {
} }
.lede { .lede {
color: var(--color-text-secondary); color: var(--fs-text-secondary);
max-width: 70ch; max-width: 70ch;
line-height: 1.6; line-height: 1.6;
margin: 0 0 1.5rem; margin: 0 0 1.5rem;
@@ -1137,9 +1137,9 @@ function isSelfContainedColour(value: string): boolean {
/* Sidebar ---------------------------------------------------------------- */ /* Sidebar ---------------------------------------------------------------- */
.ds-sidebar { .ds-sidebar {
background: var(--color-bg-card); background: var(--fs-surface-raised);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-md); border-radius: var(--fs-radius-lg);
padding: 1rem; padding: 1rem;
} }
@@ -1156,7 +1156,7 @@ function isSelfContainedColour(value: string): boolean {
font-size: 0.75rem; font-size: 0.75rem;
text-transform: uppercase; text-transform: uppercase;
letter-spacing: 0.08em; letter-spacing: 0.08em;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
} }
.system-list { .system-list {
@@ -1173,22 +1173,22 @@ function isSelfContainedColour(value: string): boolean {
text-align: left; text-align: left;
background: none; background: none;
border: 1px solid transparent; border: 1px solid transparent;
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
padding: 0.5rem 0.6rem; padding: 0.5rem 0.6rem;
cursor: pointer; cursor: pointer;
color: var(--color-text); color: var(--fs-text-primary);
display: flex; display: flex;
flex-direction: column; flex-direction: column;
gap: 0.15rem; gap: 0.15rem;
} }
.system-btn:hover { .system-btn:hover {
background: var(--color-bg-secondary); background: var(--fs-surface-raised);
} }
.system-btn.active { .system-btn.active {
border-color: var(--color-primary); border-color: var(--fs-accent);
background: var(--color-bg-secondary); background: var(--fs-surface-raised);
} }
@@ -1198,7 +1198,7 @@ function isSelfContainedColour(value: string): boolean {
.system-kind { .system-kind {
font-size: 0.75rem; font-size: 0.75rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
} }
/* Sections --------------------------------------------------------------- */ /* Sections --------------------------------------------------------------- */
@@ -1211,9 +1211,9 @@ function isSelfContainedColour(value: string): boolean {
} }
.ds-section { .ds-section {
background: var(--color-bg-card); background: var(--fs-surface-raised);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-md); border-radius: var(--fs-radius-lg);
padding: 1.25rem; padding: 1.25rem;
} }
@@ -1232,7 +1232,7 @@ function isSelfContainedColour(value: string): boolean {
.section-note, .section-note,
.muted { .muted {
color: var(--color-text-muted); color: var(--fs-text-tertiary);
font-size: 0.85rem; font-size: 0.85rem;
margin: 0 0 1rem; margin: 0 0 1rem;
} }
@@ -1247,17 +1247,17 @@ function isSelfContainedColour(value: string): boolean {
} }
.chain-link { .chain-link {
color: var(--color-text-secondary); color: var(--fs-text-secondary);
} }
.chain-link.self { .chain-link.self {
color: var(--color-text); color: var(--fs-text-primary);
font-weight: 500; font-weight: 500;
} }
.chain-arrow, .chain-arrow,
.chain-note { .chain-note {
color: var(--color-text-muted); color: var(--fs-text-tertiary);
} }
/* Fields ----------------------------------------------------------------- */ /* Fields ----------------------------------------------------------------- */
@@ -1282,24 +1282,24 @@ function isSelfContainedColour(value: string): boolean {
font-size: 0.75rem; font-size: 0.75rem;
text-transform: uppercase; text-transform: uppercase;
letter-spacing: 0.08em; letter-spacing: 0.08em;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
margin-bottom: 0.3rem; margin-bottom: 0.3rem;
} }
.field-hint { .field-hint {
margin: 0.3rem 0 0; margin: 0.3rem 0 0;
font-size: 0.8rem; font-size: 0.8rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
line-height: 1.5; line-height: 1.5;
} }
.input { .input {
width: 100%; width: 100%;
padding: 0.45rem 0.6rem; padding: 0.45rem 0.6rem;
background: var(--color-bg); background: var(--fs-surface-page);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
color: var(--color-text); color: var(--fs-text-primary);
font: inherit; font: inherit;
} }
@@ -1328,15 +1328,15 @@ textarea.input {
.confirm-copy { .confirm-copy {
font-size: 0.85rem; font-size: 0.85rem;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
max-width: 40ch; max-width: 40ch;
} }
/* Tokens ----------------------------------------------------------------- */ /* Tokens ----------------------------------------------------------------- */
.token-form { .token-form {
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
padding: 1rem; padding: 1rem;
margin-bottom: 1rem; margin-bottom: 1rem;
} }
@@ -1371,7 +1371,7 @@ textarea.input {
align-items: center; align-items: center;
gap: 0.6rem; gap: 0.6rem;
padding: 0.5rem 0; padding: 0.5rem 0;
border-bottom: 1px solid var(--color-border); border-bottom: 1px solid var(--fs-border-color);
} }
.token-name { .token-name {
@@ -1386,7 +1386,7 @@ textarea.input {
} }
.token-meta { .token-meta {
color: var(--color-text-muted); color: var(--fs-text-tertiary);
font-size: 0.8rem; font-size: 0.8rem;
flex: 1; flex: 1;
min-width: 0; min-width: 0;
@@ -1405,18 +1405,18 @@ textarea.input {
.finding-list li { .finding-list li {
padding: 0.6rem 0; padding: 0.6rem 0;
border-bottom: 1px solid var(--color-border); border-bottom: 1px solid var(--fs-border-color);
} }
.finding-title { .finding-title {
font-weight: 500; font-weight: 500;
color: var(--color-text); color: var(--fs-text-primary);
} }
.finding-line { .finding-line {
margin: 0.3rem 0 0; margin: 0.3rem 0 0;
font-size: 0.85rem; font-size: 0.85rem;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
align-items: center; align-items: center;
@@ -1428,24 +1428,24 @@ textarea.input {
text-transform: uppercase; text-transform: uppercase;
letter-spacing: 0.06em; letter-spacing: 0.06em;
padding: 0.1rem 0.45rem; padding: 0.1rem 0.45rem;
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
flex: none; flex: none;
} }
.spec-status.violated { .spec-status.violated {
background: var(--color-priority-high-bg); background: var(--fs-priority-high-bg);
color: var(--color-priority-high); color: var(--fs-priority-high);
} }
.spec-status.missing { .spec-status.missing {
background: var(--color-priority-medium-bg); background: var(--fs-priority-medium-bg);
color: var(--color-priority-medium); color: var(--fs-priority-medium);
} }
.sheet { .sheet {
background: var(--color-bg); background: var(--fs-surface-page);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
padding: 0.75rem 1rem; padding: 0.75rem 1rem;
margin-top: 0.75rem; margin-top: 0.75rem;
overflow-x: auto; overflow-x: auto;
@@ -1472,7 +1472,7 @@ textarea.input {
.supersedes { .supersedes {
font-size: 0.75rem; font-size: 0.75rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
font-style: italic; font-style: italic;
} }
@@ -1484,7 +1484,7 @@ textarea.input {
} }
.mode-name { .mode-name {
color: var(--color-text-muted); color: var(--fs-text-tertiary);
text-transform: uppercase; text-transform: uppercase;
font-size: 0.7rem; font-size: 0.7rem;
letter-spacing: 0.06em; letter-spacing: 0.06em;
@@ -1495,7 +1495,7 @@ textarea.input {
width: 0.9rem; width: 0.9rem;
height: 0.9rem; height: 0.9rem;
border-radius: 3px; border-radius: 3px;
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
flex: none; flex: none;
} }
@@ -1510,12 +1510,12 @@ textarea.input {
font-size: 0.7rem; font-size: 0.7rem;
text-transform: uppercase; text-transform: uppercase;
letter-spacing: 0.08em; letter-spacing: 0.08em;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
} }
.resolved-list li { .resolved-list li {
padding: 0.5rem 0; padding: 0.5rem 0;
border-bottom: 1px solid var(--color-border); border-bottom: 1px solid var(--fs-border-color);
} }
.resolved-head { .resolved-head {
@@ -1551,33 +1551,33 @@ textarea.input {
text-transform: uppercase; text-transform: uppercase;
letter-spacing: 0.06em; letter-spacing: 0.06em;
padding: 0.1rem 0.45rem; padding: 0.1rem 0.45rem;
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
background: var(--color-bg-secondary); background: var(--fs-surface-raised);
color: var(--color-text-muted); color: var(--fs-text-tertiary);
} }
.origin-badge.own { .origin-badge.own {
background: var(--color-primary-tint); background: var(--fs-accent-soft);
color: var(--color-primary); color: var(--fs-accent);
} }
/* Notices ---------------------------------------------------------------- */ /* Notices ---------------------------------------------------------------- */
.notice { .notice {
background: var(--color-bg-card); background: var(--fs-surface-raised);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-md); border-radius: var(--fs-radius-lg);
padding: 1.25rem; padding: 1.25rem;
max-width: 60ch; max-width: 60ch;
} }
.notice-warn { .notice-warn {
border-left: 3px solid var(--color-warning); border-left: 3px solid var(--fs-warning);
} }
.notice p { .notice p {
margin: 0.5rem 0 1rem; margin: 0.5rem 0 1rem;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
line-height: 1.6; line-height: 1.6;
} }
</style> </style>
+13 -13
View File
@@ -78,9 +78,9 @@ async function handleSubmit() {
.auth-card { .auth-card {
width: 100%; width: 100%;
max-width: 400px; max-width: 400px;
background: var(--color-bg-card); background: var(--fs-surface-raised);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-md); border-radius: var(--fs-radius-lg);
padding: 2rem; padding: 2rem;
} }
.auth-brand { .auth-brand {
@@ -97,7 +97,7 @@ async function handleSubmit() {
.auth-hint { .auth-hint {
text-align: center; text-align: center;
font-size: 0.9rem; font-size: 0.9rem;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
margin-bottom: 1rem; margin-bottom: 1rem;
} }
.field { .field {
@@ -112,25 +112,25 @@ async function handleSubmit() {
.input { .input {
width: 100%; width: 100%;
padding: 0.5rem 0.75rem; padding: 0.5rem 0.75rem;
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
font-size: 0.95rem; font-size: 0.95rem;
background: var(--color-bg); background: var(--fs-surface-page);
color: var(--color-text); color: var(--fs-text-primary);
box-sizing: border-box; box-sizing: border-box;
} }
.input:focus { .input:focus {
outline: none; outline: none;
border-color: var(--color-primary); border-color: var(--fs-accent);
} }
.error-msg { .error-msg {
color: var(--color-danger); color: var(--fs-error);
font-size: 0.9rem; font-size: 0.9rem;
margin: 0 0 0.75rem; margin: 0 0 0.75rem;
} }
.success-msg { .success-msg {
text-align: center; text-align: center;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
font-size: 0.95rem; font-size: 0.95rem;
padding: 0.5rem 0; padding: 0.5rem 0;
} }
@@ -140,10 +140,10 @@ async function handleSubmit() {
.auth-footer { .auth-footer {
text-align: center; text-align: center;
font-size: 0.9rem; font-size: 0.9rem;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
margin: 1rem 0 0; margin: 1rem 0 0;
} }
.auth-footer a { .auth-footer a {
color: var(--color-primary); color: var(--fs-accent);
} }
</style> </style>
+59 -59
View File
@@ -208,7 +208,7 @@ function initGraph() {
.attr("orient", "auto") .attr("orient", "auto")
.append("path") .append("path")
.attr("d", "M0,-4L8,0L0,4") .attr("d", "M0,-4L8,0L0,4")
.attr("fill", "var(--color-primary)") .attr("fill", "var(--fs-accent)")
.attr("opacity", "0.6"); .attr("opacity", "0.6");
// Zoom layer // Zoom layer
@@ -237,7 +237,7 @@ function initGraph() {
.append("line") .append("line")
.attr("class", "graph-edge") .attr("class", "graph-edge")
.attr("stroke", (d: any) => .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-opacity", (d: any) => (d.type === "wikilink" ? 0.5 : 0.4))
.attr("stroke-dasharray", null) .attr("stroke-dasharray", null)
@@ -295,11 +295,11 @@ function initGraph() {
.append("circle") .append("circle")
.attr("r", (d: GraphNode) => d.radius ?? 8) .attr("r", (d: GraphNode) => d.radius ?? 8)
.attr("fill", (d: GraphNode) => { .attr("fill", (d: GraphNode) => {
if (d.type === "tag") return "color-mix(in srgb, var(--color-primary) 20%, transparent)"; if (d.type === "tag") return "color-mix(in srgb, var(--fs-accent) 20%, transparent)";
return d.project_color ?? "var(--color-bg-secondary)"; return d.project_color ?? "var(--fs-surface-raised)";
}) })
.attr("stroke", (d: GraphNode) => .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-width", (d: GraphNode) => (d.type === "tag" ? 1.5 : 1.5))
.attr("stroke-dasharray", (d: GraphNode) => (d.type === "task" ? "3" : null)) .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("dy", (d: GraphNode) => (d.radius ?? 8) + 12)
.attr("font-size", "10px") .attr("font-size", "10px")
.attr("fill", (d: GraphNode) => .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"); .attr("pointer-events", "none");
@@ -600,7 +600,7 @@ onUnmounted(() => {
.graph-page { .graph-page {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
height: calc(100vh - var(--header-height)); height: calc(100vh - var(--fs-layout-header));
overflow: hidden; overflow: hidden;
} }
@@ -609,17 +609,17 @@ onUnmounted(() => {
align-items: center; align-items: center;
gap: 0.75rem; gap: 0.75rem;
padding: 0.6rem 1rem; padding: 0.6rem 1rem;
background: var(--color-bg-secondary); background: var(--fs-surface-raised);
border-bottom: 1px solid var(--color-border); border-bottom: 1px solid var(--fs-border-color);
flex-shrink: 0; flex-shrink: 0;
flex-wrap: wrap; flex-wrap: wrap;
} }
.graph-select { .graph-select {
background: var(--color-bg-card); background: var(--fs-surface-raised);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
color: var(--color-text); color: var(--fs-text-primary);
font-size: 0.875rem; font-size: 0.875rem;
padding: 0.3rem 0.6rem; padding: 0.3rem 0.6rem;
cursor: pointer; cursor: pointer;
@@ -631,27 +631,27 @@ onUnmounted(() => {
align-items: center; align-items: center;
gap: 0.35rem; gap: 0.35rem;
font-size: 0.875rem; font-size: 0.875rem;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
cursor: pointer; cursor: pointer;
user-select: none; user-select: none;
} }
.graph-toggle input { .graph-toggle input {
cursor: pointer; cursor: pointer;
accent-color: var(--color-primary); accent-color: var(--fs-accent);
} }
.graph-stats { .graph-stats {
margin-left: auto; margin-left: auto;
font-size: 0.8rem; font-size: 0.8rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
} }
.graph-physics-btn { .graph-physics-btn {
background: var(--color-bg-card); background: var(--fs-surface-raised);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
color: var(--color-text-secondary); color: var(--fs-text-secondary);
font-size: 0.875rem; font-size: 0.875rem;
font-family: inherit; font-family: inherit;
padding: 0.3rem 0.7rem; padding: 0.3rem 0.7rem;
@@ -659,12 +659,12 @@ onUnmounted(() => {
transition: border-color 0.15s, color 0.15s; transition: border-color 0.15s, color 0.15s;
} }
.graph-physics-btn:hover { .graph-physics-btn:hover {
border-color: var(--color-primary); border-color: var(--fs-accent);
color: var(--color-text); color: var(--fs-text-primary);
} }
.graph-physics-btn.active { .graph-physics-btn.active {
border-color: var(--color-primary); border-color: var(--fs-accent);
color: var(--color-primary); color: var(--fs-accent);
} }
.graph-physics-panel { .graph-physics-panel {
@@ -672,8 +672,8 @@ onUnmounted(() => {
flex-wrap: wrap; flex-wrap: wrap;
gap: 0.5rem 1.5rem; gap: 0.5rem 1.5rem;
padding: 0.6rem 1rem; padding: 0.6rem 1rem;
background: var(--color-bg-secondary); background: var(--fs-surface-raised);
border-bottom: 1px solid var(--color-border); border-bottom: 1px solid var(--fs-border-color);
flex-shrink: 0; flex-shrink: 0;
} }
@@ -688,20 +688,20 @@ onUnmounted(() => {
.knob-label { .knob-label {
font-size: 0.75rem; font-size: 0.75rem;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
} }
.knob-label em { .knob-label em {
font-style: normal; font-style: normal;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
font-variant-numeric: tabular-nums; font-variant-numeric: tabular-nums;
} }
.physics-knob input[type="range"] { .physics-knob input[type="range"] {
width: 100%; width: 100%;
accent-color: var(--color-primary); accent-color: var(--fs-accent);
cursor: pointer; cursor: pointer;
} }
@@ -709,7 +709,7 @@ onUnmounted(() => {
flex: 1; flex: 1;
position: relative; position: relative;
overflow: hidden; overflow: hidden;
background: var(--color-bg); background: var(--fs-surface-page);
} }
.graph-svg { .graph-svg {
@@ -728,15 +728,15 @@ onUnmounted(() => {
} }
.graph-empty p { .graph-empty p {
color: var(--color-text-muted); color: var(--fs-text-tertiary);
font-size: 0.95rem; font-size: 0.95rem;
} }
.spinner { .spinner {
width: 28px; width: 28px;
height: 28px; height: 28px;
border: 3px solid var(--color-border); border: 3px solid var(--fs-border-color);
border-top-color: var(--color-primary); border-top-color: var(--fs-accent);
border-radius: 50%; border-radius: 50%;
animation: spin 0.7s linear infinite; animation: spin 0.7s linear infinite;
} }
@@ -747,9 +747,9 @@ onUnmounted(() => {
.graph-tooltip { .graph-tooltip {
position: absolute; position: absolute;
background: var(--color-bg-card); background: var(--fs-surface-raised);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-md); border-radius: var(--fs-radius-lg);
box-shadow: 0 4px 16px var(--color-shadow); box-shadow: 0 4px 16px var(--color-shadow);
padding: 0.5rem 0.75rem; padding: 0.5rem 0.75rem;
pointer-events: none; pointer-events: none;
@@ -760,7 +760,7 @@ onUnmounted(() => {
.tooltip-title { .tooltip-title {
font-size: 0.875rem; font-size: 0.875rem;
font-weight: 500; font-weight: 500;
color: var(--color-text); color: var(--fs-text-primary);
margin-bottom: 0.25rem; margin-bottom: 0.25rem;
} }
@@ -773,15 +773,15 @@ onUnmounted(() => {
.tag-chip { .tag-chip {
font-size: 0.7rem; font-size: 0.7rem;
background: color-mix(in srgb, var(--color-primary) 15%, transparent); background: color-mix(in srgb, var(--fs-accent) 15%, transparent);
color: var(--color-primary); color: var(--fs-accent);
border-radius: 999px; border-radius: 999px;
padding: 0.1rem 0.4rem; padding: 0.1rem 0.4rem;
} }
.tooltip-meta { .tooltip-meta {
font-size: 0.75rem; font-size: 0.75rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
text-transform: capitalize; text-transform: capitalize;
} }
@@ -792,8 +792,8 @@ onUnmounted(() => {
right: 0; right: 0;
bottom: 0; bottom: 0;
width: 340px; width: 340px;
background: var(--color-bg-card); background: var(--fs-surface-raised);
border-left: 1px solid var(--color-border); border-left: 1px solid var(--fs-border-color);
box-shadow: -4px 0 16px rgba(0, 0, 0, 0.1); box-shadow: -4px 0 16px rgba(0, 0, 0, 0.1);
display: flex; display: flex;
flex-direction: column; flex-direction: column;
@@ -815,7 +815,7 @@ onUnmounted(() => {
align-items: center; align-items: center;
gap: 0.5rem; gap: 0.5rem;
padding: 0.6rem 0.75rem; padding: 0.6rem 0.75rem;
border-bottom: 1px solid var(--color-border); border-bottom: 1px solid var(--fs-border-color);
flex-shrink: 0; flex-shrink: 0;
} }
@@ -826,10 +826,10 @@ onUnmounted(() => {
letter-spacing: 0.05em; letter-spacing: 0.05em;
padding: 0.15rem 0.45rem; padding: 0.15rem 0.45rem;
border-radius: 10px; border-radius: 10px;
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
color: var(--color-text-muted); 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 { .peek-actions {
display: flex; display: flex;
@@ -840,7 +840,7 @@ onUnmounted(() => {
.peek-link { .peek-link {
font-size: 0.78rem; font-size: 0.78rem;
color: var(--color-primary); color: var(--fs-accent);
text-decoration: none; text-decoration: none;
} }
.peek-link:hover { text-decoration: underline; } .peek-link:hover { text-decoration: underline; }
@@ -848,20 +848,20 @@ onUnmounted(() => {
.peek-close { .peek-close {
background: none; background: none;
border: none; border: none;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
font-size: 0.8rem; font-size: 0.8rem;
cursor: pointer; cursor: pointer;
padding: 0.1rem 0.25rem; padding: 0.1rem 0.25rem;
border-radius: 3px; border-radius: 3px;
} }
.peek-close:hover { color: var(--color-text); } .peek-close:hover { color: var(--fs-text-primary); }
.peek-title { .peek-title {
margin: 0; margin: 0;
padding: 0.75rem 0.75rem 0.4rem; padding: 0.75rem 0.75rem 0.4rem;
font-size: 1rem; font-size: 1rem;
font-weight: 500; font-weight: 500;
color: var(--color-text); color: var(--fs-text-primary);
flex-shrink: 0; flex-shrink: 0;
} }
@@ -877,7 +877,7 @@ onUnmounted(() => {
flex: 1; flex: 1;
overflow-y: auto; overflow-y: auto;
padding: 0 0.75rem 0.5rem; padding: 0 0.75rem 0.5rem;
border-bottom: 1px solid var(--color-border); border-bottom: 1px solid var(--fs-border-color);
} }
.peek-prose { .peek-prose {
@@ -887,7 +887,7 @@ onUnmounted(() => {
.peek-loading, .peek-loading,
.peek-empty { .peek-empty {
font-size: 0.82rem; font-size: 0.82rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
padding-top: 0.5rem; padding-top: 0.5rem;
} }
@@ -901,7 +901,7 @@ onUnmounted(() => {
font-weight: 500; font-weight: 500;
text-transform: uppercase; text-transform: uppercase;
letter-spacing: 0.05em; letter-spacing: 0.05em;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
margin-bottom: 0.4rem; margin-bottom: 0.4rem;
} }
@@ -921,14 +921,14 @@ onUnmounted(() => {
align-items: center; align-items: center;
gap: 0.4rem; gap: 0.4rem;
font-size: 0.82rem; font-size: 0.82rem;
color: var(--color-text); color: var(--fs-text-primary);
cursor: pointer; cursor: pointer;
padding: 0.25rem 0.4rem; padding: 0.25rem 0.4rem;
border-radius: 4px; border-radius: 4px;
} }
.peek-linked-item:hover { .peek-linked-item:hover {
background: color-mix(in srgb, var(--color-primary) 8%, var(--color-bg-card)); background: color-mix(in srgb, var(--fs-accent) 8%, var(--fs-surface-raised));
color: var(--color-primary); color: var(--fs-accent);
} }
.peek-linked-type { .peek-linked-type {
@@ -937,12 +937,12 @@ onUnmounted(() => {
width: 1.1rem; width: 1.1rem;
height: 1.1rem; height: 1.1rem;
border-radius: 50%; border-radius: 50%;
background: var(--color-bg); background: var(--fs-surface-page);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
flex-shrink: 0; flex-shrink: 0;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
} }
</style> </style>
+70 -70
View File
@@ -579,7 +579,7 @@ onUnmounted(() => {
.knowledge-root { .knowledge-root {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
height: calc(100vh - var(--header-height)); height: calc(100vh - var(--fs-layout-header));
overflow: hidden; overflow: hidden;
} }
@@ -590,8 +590,8 @@ onUnmounted(() => {
justify-content: space-between; justify-content: space-between;
gap: 12px; gap: 12px;
padding: 8px 20px; padding: 8px 20px;
background: var(--color-bg-secondary); background: var(--fs-surface-raised);
border-bottom: 1px solid var(--color-border); border-bottom: 1px solid var(--fs-border-color);
flex-shrink: 0; flex-shrink: 0;
font-size: 0.82rem; font-size: 0.82rem;
flex-wrap: wrap; flex-wrap: wrap;
@@ -607,7 +607,7 @@ onUnmounted(() => {
font-size: 0.78rem; font-size: 0.78rem;
} }
.today-link { .today-link {
color: var(--color-primary); color: var(--fs-accent);
text-decoration: none; text-decoration: none;
font-weight: 500; font-weight: 500;
opacity: 0.85; opacity: 0.85;
@@ -625,19 +625,19 @@ onUnmounted(() => {
/* ── Filter panel ────────────────────────────────────────── */ /* ── Filter panel ────────────────────────────────────────── */
.filter-panel { .filter-panel {
width: var(--sidebar-width); width: var(--fs-layout-sidebar);
flex-shrink: 0; flex-shrink: 0;
padding: 16px 12px; padding: 16px 12px;
border-right: 1px solid var(--color-border); border-right: 1px solid var(--fs-border-color);
overflow-y: auto; overflow-y: auto;
background: var(--color-bg-secondary); background: var(--fs-surface-raised);
} }
.filter-section { margin-bottom: 20px; } .filter-section { margin-bottom: 20px; }
.filter-section + .filter-section::before { .filter-section + .filter-section::before {
content: '· · ·'; content: '· · ·';
display: block; display: block;
text-align: center; 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; font-size: 0.9rem;
letter-spacing: 0.4em; letter-spacing: 0.4em;
padding: 4px 0 12px; padding: 4px 0 12px;
@@ -645,7 +645,7 @@ onUnmounted(() => {
.filter-label { .filter-label {
font-family: 'Fraunces', Georgia, serif; font-family: 'Fraunces', Georgia, serif;
font-size: 0.95rem; font-size: 0.95rem;
color: var(--color-primary); color: var(--fs-accent);
margin-bottom: 8px; margin-bottom: 8px;
padding: 0 4px; padding: 0 4px;
} }
@@ -662,14 +662,14 @@ onUnmounted(() => {
padding: 8px 12px; padding: 8px 12px;
border-radius: 10px; border-radius: 10px;
border: none; border: none;
background: var(--gradient-cta); background: var(--fs-gradient-cta);
color: var(--fs-text-on-action); color: var(--fs-text-on-action);
cursor: pointer; cursor: pointer;
font-size: 0.85rem; font-size: 0.85rem;
font-weight: 500; font-weight: 500;
transition: box-shadow 0.15s; 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 { .btn-new-icon {
font-size: 1.1rem; font-size: 1.1rem;
line-height: 1; line-height: 1;
@@ -680,8 +680,8 @@ onUnmounted(() => {
top: calc(100% + 6px); top: calc(100% + 6px);
left: 0; left: 0;
right: 0; right: 0;
background: var(--color-bg-card); background: var(--fs-surface-raised);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: 10px; border-radius: 10px;
overflow: hidden; overflow: hidden;
z-index: 50; z-index: 50;
@@ -696,15 +696,15 @@ onUnmounted(() => {
padding: 9px 14px; padding: 9px 14px;
background: none; background: none;
border: none; border: none;
color: var(--color-text); color: var(--fs-text-primary);
cursor: pointer; cursor: pointer;
font-size: 0.84rem; font-size: 0.84rem;
text-align: left; text-align: left;
transition: background 0.12s, color 0.12s; transition: background 0.12s, color 0.12s;
} }
.new-note-menu button:hover { .new-note-menu button:hover {
background: var(--color-primary-tint); background: var(--fs-accent-soft);
color: var(--color-primary); color: var(--fs-accent);
} }
.new-note-menu button svg { .new-note-menu button svg {
flex-shrink: 0; flex-shrink: 0;
@@ -712,7 +712,7 @@ onUnmounted(() => {
} }
.new-note-menu button:hover svg { .new-note-menu button:hover svg {
opacity: 1; opacity: 1;
stroke: var(--color-primary); stroke: var(--fs-accent);
} }
.filter-btn { .filter-btn {
@@ -725,7 +725,7 @@ onUnmounted(() => {
border-radius: 7px; border-radius: 7px;
border: none; border: none;
background: transparent; background: transparent;
color: var(--color-text); color: var(--fs-text-primary);
cursor: pointer; cursor: pointer;
font-size: 0.85rem; font-size: 0.85rem;
margin-bottom: 2px; margin-bottom: 2px;
@@ -734,8 +734,8 @@ onUnmounted(() => {
} }
.filter-btn:hover { background: rgba(255,255,255,0.05); opacity: 1; } .filter-btn:hover { background: rgba(255,255,255,0.05); opacity: 1; }
.filter-btn.active { .filter-btn.active {
background: var(--color-primary-wash); background: var(--fs-accent-wash);
color: var(--color-primary); color: var(--fs-accent);
opacity: 1; opacity: 1;
} }
.filter-btn-label { flex: 1; } .filter-btn-label { flex: 1; }
@@ -744,15 +744,15 @@ onUnmounted(() => {
padding: 1px 6px; padding: 1px 6px;
border-radius: 10px; border-radius: 10px;
background: rgba(255,255,255,0.07); background: rgba(255,255,255,0.07);
color: var(--color-muted); color: var(--fs-text-tertiary);
font-weight: 500; font-weight: 500;
min-width: 20px; min-width: 20px;
text-align: center; text-align: center;
flex-shrink: 0; flex-shrink: 0;
} }
.filter-btn.active .filter-count { .filter-btn.active .filter-count {
background: color-mix(in srgb, var(--color-primary) 20%, transparent); background: color-mix(in srgb, var(--fs-accent) 20%, transparent);
color: var(--color-primary); color: var(--fs-accent);
} }
.filter-tag { font-size: 0.78rem; } .filter-tag { font-size: 0.78rem; }
@@ -772,7 +772,7 @@ onUnmounted(() => {
gap: 10px; gap: 10px;
padding: 12px 20px; padding: 12px 20px;
flex-shrink: 0; flex-shrink: 0;
border-bottom: 1px solid var(--color-border); border-bottom: 1px solid var(--fs-border-color);
} }
.search-wrap { .search-wrap {
flex: 1; flex: 1;
@@ -783,27 +783,27 @@ onUnmounted(() => {
left: 10px; left: 10px;
top: 50%; top: 50%;
transform: translateY(-50%); transform: translateY(-50%);
color: var(--color-muted); color: var(--fs-text-tertiary);
pointer-events: none; pointer-events: none;
} }
.search-input { .search-input {
width: 100%; width: 100%;
padding: 7px 12px 7px 32px; padding: 7px 12px 7px 32px;
border-radius: 8px; border-radius: 8px;
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
background: var(--color-bg-tertiary); background: var(--fs-surface-hover);
color: var(--color-text); color: var(--fs-text-primary);
font-size: 0.88rem; font-size: 0.88rem;
outline: none; outline: none;
transition: border-color 0.15s; transition: border-color 0.15s;
} }
.search-input:focus { border-color: var(--color-primary); } .search-input:focus { border-color: var(--fs-accent); }
.sort-select { .sort-select {
padding: 7px 10px; padding: 7px 10px;
border-radius: 8px; border-radius: 8px;
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
background: var(--color-bg-tertiary); background: var(--fs-surface-hover);
color: var(--color-text); color: var(--fs-text-primary);
font-size: 0.85rem; font-size: 0.85rem;
cursor: pointer; cursor: pointer;
outline: none; outline: none;
@@ -824,9 +824,9 @@ onUnmounted(() => {
.k-card { .k-card {
position: relative; position: relative;
background: var(--color-surface); background: var(--fs-surface-hover);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-lg); border-radius: var(--fs-radius-xl);
padding: 14px; padding: 14px;
cursor: pointer; cursor: pointer;
transition: border-color 0.15s, transform 0.12s, box-shadow 0.15s; transition: border-color 0.15s, transform 0.12s, box-shadow 0.15s;
@@ -838,12 +838,12 @@ onUnmounted(() => {
} }
.k-card:hover { .k-card:hover {
transform: translateY(-2px); 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); 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(--color-primary) 35%, transparent); border-color: color-mix(in srgb, var(--fs-accent) 35%, transparent);
} }
/* Type-specific card DNA */ /* 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); } .k-card--task { border-color: rgba(212, 160, 23, 0.18); }
/* Top gradient bars */ /* Top gradient bars */
@@ -858,7 +858,7 @@ onUnmounted(() => {
} }
.k-card--note::before { .k-card--note::before {
right: 0; right: 0;
background: linear-gradient(90deg, var(--color-primary), #7A6DA8); background: linear-gradient(90deg, var(--fs-accent), #7A6DA8);
} }
.k-card--task::before { .k-card--task::before {
right: 0; right: 0;
@@ -877,7 +877,7 @@ onUnmounted(() => {
text-transform: uppercase; text-transform: uppercase;
letter-spacing: 0.04em; 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--task { background: rgba(212,160,23,0.15); color: #fbbf24; }
.badge--plan { background: rgba(99,102,241,0.18); color: #818cf8; } .badge--plan { background: rgba(99,102,241,0.18); color: #818cf8; }
@@ -894,7 +894,7 @@ onUnmounted(() => {
} }
.k-card-snippet { .k-card-snippet {
font-size: 0.8rem; font-size: 0.8rem;
color: var(--color-muted); color: var(--fs-text-tertiary);
display: -webkit-box; display: -webkit-box;
-webkit-line-clamp: 4; -webkit-line-clamp: 4;
-webkit-box-orient: vertical; -webkit-box-orient: vertical;
@@ -914,9 +914,9 @@ onUnmounted(() => {
padding: 1px 6px; padding: 1px 6px;
border-radius: 8px; border-radius: 8px;
background: rgba(255,255,255,0.05); 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 /* Only rendered for a record another user owns, so an unmarked card is
unambiguously the viewer's own. */ unambiguously the viewer's own. */
.shared-tag { .shared-tag {
@@ -924,8 +924,8 @@ onUnmounted(() => {
padding: 0.08rem 0.35rem; padding: 0.08rem 0.35rem;
border-radius: 4px; border-radius: 4px;
white-space: nowrap; white-space: nowrap;
background: color-mix(in srgb, var(--color-text-secondary) 15%, transparent); background: color-mix(in srgb, var(--fs-text-secondary) 15%, transparent);
color: var(--color-text-secondary); color: var(--fs-text-secondary);
} }
/* ── Task card ──────────────────────────────────────────── */ /* ── Task card ──────────────────────────────────────────── */
@@ -945,10 +945,10 @@ onUnmounted(() => {
border-radius: 8px; border-radius: 8px;
font-weight: 500; font-weight: 500;
} }
.status--todo { background: var(--color-status-todo-bg); color: var(--color-status-todo); } .status--todo { background: var(--fs-status-todo-bg); color: var(--fs-status-todo); }
.status--in_progress { background: var(--color-status-in-progress-bg); color: var(--color-status-in-progress); } .status--in_progress { background: var(--fs-status-in-progress-bg); color: var(--fs-status-in-progress); }
.status--done { background: var(--color-status-done-bg); color: var(--color-status-done); } .status--done { background: var(--fs-status-done-bg); color: var(--fs-status-done); }
.status--cancelled { background: var(--color-status-todo-bg); color: var(--color-status-todo); text-decoration: line-through; } .status--cancelled { background: var(--fs-status-todo-bg); color: var(--fs-status-todo); text-decoration: line-through; }
.priority-badge { .priority-badge {
font-size: 0.7rem; font-size: 0.7rem;
@@ -956,16 +956,16 @@ onUnmounted(() => {
border-radius: 8px; border-radius: 8px;
font-weight: 500; font-weight: 500;
} }
.priority--low { background: var(--color-priority-low-bg); color: var(--color-priority-low); } .priority--low { background: var(--fs-priority-low-bg); color: var(--fs-priority-low); }
.priority--normal { background: var(--color-priority-medium-bg); color: var(--color-priority-medium); } .priority--normal { background: var(--fs-priority-medium-bg); color: var(--fs-priority-medium); }
.priority--high { background: var(--color-priority-high-bg); color: var(--color-priority-high); } .priority--high { background: var(--fs-priority-high-bg); color: var(--fs-priority-high); }
.task-due { .task-due {
font-size: 0.78rem; font-size: 0.78rem;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
} }
.task-overdue { .task-overdue {
color: var(--color-overdue); color: var(--fs-overdue);
font-weight: 500; font-weight: 500;
} }
@@ -977,7 +977,7 @@ onUnmounted(() => {
align-items: center; align-items: center;
justify-content: center; justify-content: center;
padding: 60px 20px; padding: 60px 20px;
color: var(--color-muted); color: var(--fs-text-tertiary);
text-align: center; text-align: center;
gap: 6px; gap: 6px;
} }
@@ -985,7 +985,7 @@ onUnmounted(() => {
.empty-narrator { .empty-narrator {
font-family: 'Fraunces', Georgia, serif; font-family: 'Fraunces', Georgia, serif;
font-size: 1rem; font-size: 1rem;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
opacity: 0.85; opacity: 0.85;
} }
@@ -999,17 +999,17 @@ onUnmounted(() => {
} }
.sentinel-loading { .sentinel-loading {
font-size: 0.8rem; font-size: 0.8rem;
color: var(--color-muted); color: var(--fs-text-tertiary);
} }
/* ── Graph panel ─────────────────────────────────────────── */ /* ── Graph panel ─────────────────────────────────────────── */
.graph-panel { .graph-panel {
width: 500px; width: 500px;
flex-shrink: 0; flex-shrink: 0;
border-left: 1px solid var(--color-border); border-left: 1px solid var(--fs-border-color);
display: flex; display: flex;
flex-direction: column; flex-direction: column;
background: var(--color-bg-secondary); background: var(--fs-surface-raised);
transition: width 0.2s ease; transition: width 0.2s ease;
} }
.graph-panel.expanded { .graph-panel.expanded {
@@ -1022,7 +1022,7 @@ onUnmounted(() => {
padding: 10px 14px; padding: 10px 14px;
font-size: 0.85rem; font-size: 0.85rem;
font-weight: 500; font-weight: 500;
border-bottom: 1px solid var(--color-border); border-bottom: 1px solid var(--fs-border-color);
flex-shrink: 0; flex-shrink: 0;
} }
/* RESTORED (#2444). The panel is a flex COLUMN and its header is /* RESTORED (#2444). The panel is a flex COLUMN and its header is
@@ -1050,15 +1050,15 @@ onUnmounted(() => {
.dup-panel { .dup-panel {
margin-bottom: 1.25rem; margin-bottom: 1.25rem;
padding: 0.85rem 1rem; padding: 0.85rem 1rem;
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: 8px; border-radius: 8px;
background: var(--color-surface-alt); background: var(--fs-surface-hover);
} }
.dup-empty, .dup-empty,
.dup-head { .dup-head {
margin: 0 0 0.5rem; margin: 0 0 0.5rem;
font-size: 0.85rem; font-size: 0.85rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
} }
.dup-empty { margin-bottom: 0; } .dup-empty { margin-bottom: 0; }
.dup-group { .dup-group {
@@ -1067,7 +1067,7 @@ onUnmounted(() => {
gap: 0.75rem; gap: 0.75rem;
flex-wrap: wrap; flex-wrap: wrap;
padding: 0.5rem 0; padding: 0.5rem 0;
border-top: 1px solid var(--color-border); border-top: 1px solid var(--fs-border-color);
} }
.dup-members { .dup-members {
display: flex; display: flex;
@@ -1080,23 +1080,23 @@ onUnmounted(() => {
font-size: 0.8rem; font-size: 0.8rem;
padding: 0.1rem 0.45rem; padding: 0.1rem 0.45rem;
border-radius: 4px; border-radius: 4px;
background: color-mix(in srgb, var(--color-text-muted) 12%, transparent); background: color-mix(in srgb, var(--fs-text-tertiary) 12%, transparent);
color: var(--color-text); color: var(--fs-text-primary);
text-decoration: none; text-decoration: none;
overflow-wrap: anywhere; overflow-wrap: anywhere;
} }
.dup-member:hover { background: var(--color-hover); } .dup-member:hover { background: var(--fs-surface-hover); }
.dup-score { .dup-score {
font-size: 0.75rem; font-size: 0.75rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
font-variant-numeric: tabular-nums; font-variant-numeric: tabular-nums;
white-space: nowrap; white-space: nowrap;
} }
/* A set someone already ruled on — quiet, not celebratory: it means "skip". */ /* A set someone already ruled on — quiet, not celebratory: it means "skip". */
.dup-claimed { .dup-claimed {
font-size: 0.72rem; font-size: 0.72rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: 4px; border-radius: 4px;
padding: 0.05rem 0.4rem; padding: 0.05rem 0.4rem;
white-space: nowrap; white-space: nowrap;
+17 -17
View File
@@ -123,9 +123,9 @@ function loginWithOAuth() {
.auth-card { .auth-card {
width: 100%; width: 100%;
max-width: 400px; max-width: 400px;
background: var(--color-bg-card); background: var(--fs-surface-raised);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-md); border-radius: var(--fs-radius-lg);
padding: 2rem; padding: 2rem;
} }
.auth-brand { .auth-brand {
@@ -142,11 +142,11 @@ function loginWithOAuth() {
.auth-hint { .auth-hint {
text-align: center; text-align: center;
font-size: 0.9rem; font-size: 0.9rem;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
margin-bottom: 1rem; margin-bottom: 1rem;
} }
.auth-hint a { .auth-hint a {
color: var(--color-primary); color: var(--fs-accent);
} }
.field { .field {
margin-bottom: 1rem; margin-bottom: 1rem;
@@ -160,19 +160,19 @@ function loginWithOAuth() {
.input { .input {
width: 100%; width: 100%;
padding: 0.5rem 0.75rem; padding: 0.5rem 0.75rem;
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
font-size: 0.95rem; font-size: 0.95rem;
background: var(--color-bg); background: var(--fs-surface-page);
color: var(--color-text); color: var(--fs-text-primary);
box-sizing: border-box; box-sizing: border-box;
} }
.input:focus { .input:focus {
outline: none; outline: none;
border-color: var(--color-primary); border-color: var(--fs-accent);
} }
.error-msg { .error-msg {
color: var(--color-danger); color: var(--fs-error);
font-size: 0.9rem; font-size: 0.9rem;
margin: 0 0 0.75rem; margin: 0 0 0.75rem;
} }
@@ -181,23 +181,23 @@ function loginWithOAuth() {
align-items: center; align-items: center;
gap: 0.75rem; gap: 0.75rem;
margin: 1.25rem 0; margin: 1.25rem 0;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
font-size: 0.85rem; font-size: 0.85rem;
} }
.divider::before, .divider::before,
.divider::after { .divider::after {
content: ""; content: "";
flex: 1; flex: 1;
border-top: 1px solid var(--color-border); border-top: 1px solid var(--fs-border-color);
} }
.auth-footer { .auth-footer {
text-align: center; text-align: center;
font-size: 0.9rem; font-size: 0.9rem;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
margin: 1rem 0 0; margin: 1rem 0 0;
} }
.auth-footer a { .auth-footer a {
color: var(--color-primary); color: var(--fs-accent);
} }
.forgot-link { .forgot-link {
text-align: right; text-align: right;
@@ -205,9 +205,9 @@ function loginWithOAuth() {
font-size: 0.85rem; font-size: 0.85rem;
} }
.forgot-link a { .forgot-link a {
color: var(--color-text-secondary); color: var(--fs-text-secondary);
} }
.forgot-link a:hover { .forgot-link a:hover {
color: var(--color-primary); color: var(--fs-accent);
} }
</style> </style>
+37 -37
View File
@@ -263,9 +263,9 @@ function clearFilters() {
margin: 0 0 1.5rem; margin: 0 0 1.5rem;
} }
.settings-section { .settings-section {
background: var(--color-bg-card); background: var(--fs-surface-raised);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-md); border-radius: var(--fs-radius-lg);
padding: 1.25rem; padding: 1.25rem;
margin-bottom: 1.5rem; margin-bottom: 1.5rem;
} }
@@ -292,23 +292,23 @@ function clearFilters() {
.stat-count { .stat-count {
font-size: 1.5rem; font-size: 1.5rem;
font-weight: 700; font-weight: 700;
color: var(--color-text); color: var(--fs-text-primary);
} }
.stat-label { .stat-label {
font-size: 0.75rem; font-size: 0.75rem;
font-weight: 600; font-weight: 600;
text-transform: uppercase; text-transform: uppercase;
letter-spacing: 0.05em; letter-spacing: 0.05em;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
} }
.stat-audit { .stat-audit {
color: var(--color-primary); color: var(--fs-accent);
} }
.stat-usage { .stat-usage {
color: var(--color-success); color: var(--fs-success);
} }
.stat-error { .stat-error {
color: var(--color-danger); color: var(--fs-error);
} }
/* Filters */ /* Filters */
@@ -321,10 +321,10 @@ function clearFilters() {
.filter-input, .filter-input,
.filter-date { .filter-date {
padding: 0.4rem 0.6rem; padding: 0.4rem 0.6rem;
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
background: var(--color-bg); background: var(--fs-surface-page);
color: var(--color-text); color: var(--fs-text-primary);
font-size: 0.85rem; font-size: 0.85rem;
} }
.filter-select { .filter-select {
@@ -342,7 +342,7 @@ function clearFilters() {
.loading-msg, .loading-msg,
.empty-msg { .empty-msg {
text-align: center; text-align: center;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
font-size: 0.9rem; font-size: 0.9rem;
padding: 1rem 0; padding: 1rem 0;
} }
@@ -356,13 +356,13 @@ function clearFilters() {
font-weight: 600; font-weight: 600;
text-transform: uppercase; text-transform: uppercase;
letter-spacing: 0.05em; letter-spacing: 0.05em;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
padding: 0.5rem 0.75rem; padding: 0.5rem 0.75rem;
border-bottom: 1px solid var(--color-border); border-bottom: 1px solid var(--fs-border-color);
} }
.logs-table td { .logs-table td {
padding: 0.5rem 0.75rem; padding: 0.5rem 0.75rem;
border-bottom: 1px solid var(--color-border); border-bottom: 1px solid var(--fs-border-color);
font-size: 0.85rem; font-size: 0.85rem;
} }
.logs-table tbody tr:last-child td { .logs-table tbody tr:last-child td {
@@ -373,18 +373,18 @@ function clearFilters() {
transition: background 0.1s; transition: background 0.1s;
} }
.log-row:hover { .log-row:hover {
background: var(--color-bg-secondary); background: var(--fs-surface-raised);
} }
.row-expanded { .row-expanded {
background: var(--color-bg-secondary); background: var(--fs-surface-raised);
} }
.cell-time { .cell-time {
white-space: nowrap; white-space: nowrap;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
font-size: 0.8rem; font-size: 0.8rem;
} }
.cell-user { .cell-user {
color: var(--color-text-secondary); color: var(--fs-text-secondary);
} }
.cell-action { .cell-action {
max-width: 280px; max-width: 280px;
@@ -399,22 +399,22 @@ function clearFilters() {
.cell-ip { .cell-ip {
font-family: monospace; font-family: monospace;
font-size: 0.8rem; font-size: 0.8rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
white-space: nowrap; white-space: nowrap;
} }
.cell-duration { .cell-duration {
color: var(--color-text-muted); color: var(--fs-text-tertiary);
font-size: 0.8rem; font-size: 0.8rem;
white-space: nowrap; white-space: nowrap;
} }
.detail-ip { .detail-ip {
font-family: monospace; font-family: monospace;
font-size: 0.8rem; font-size: 0.8rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
margin-bottom: 0.4rem; margin-bottom: 0.4rem;
} }
.text-error { .text-error {
color: var(--color-danger); color: var(--fs-error);
} }
/* Category badges */ /* Category badges */
@@ -425,19 +425,19 @@ function clearFilters() {
text-transform: uppercase; text-transform: uppercase;
letter-spacing: 0.05em; letter-spacing: 0.05em;
padding: 0.1rem 0.35rem; padding: 0.1rem 0.35rem;
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
} }
.cat-audit { .cat-audit {
color: var(--color-primary); color: var(--fs-accent);
background: color-mix(in srgb, var(--color-primary) 15%, transparent); background: color-mix(in srgb, var(--fs-accent) 15%, transparent);
} }
.cat-usage { .cat-usage {
color: var(--color-success); color: var(--fs-success);
background: color-mix(in srgb, var(--color-success) 15%, transparent); background: color-mix(in srgb, var(--fs-success) 15%, transparent);
} }
.cat-error { .cat-error {
color: var(--color-danger); color: var(--fs-error);
background: color-mix(in srgb, var(--color-danger) 15%, transparent); background: color-mix(in srgb, var(--fs-error) 15%, transparent);
} }
/* Method tag */ /* Method tag */
@@ -448,8 +448,8 @@ function clearFilters() {
font-family: monospace; font-family: monospace;
padding: 0.05rem 0.25rem; padding: 0.05rem 0.25rem;
border-radius: 3px; border-radius: 3px;
background: var(--color-bg-secondary); background: var(--fs-surface-raised);
color: var(--color-text-muted); color: var(--fs-text-tertiary);
margin-right: 0.25rem; margin-right: 0.25rem;
} }
@@ -458,14 +458,14 @@ function clearFilters() {
cells don't carry, and the row exists to scope the rule below (#2444). */ cells don't carry, and the row exists to scope the rule below (#2444). */
.detail-row td { .detail-row td {
padding: 0 0.75rem 0.75rem; padding: 0 0.75rem 0.75rem;
border-bottom: 1px solid var(--color-border); border-bottom: 1px solid var(--fs-border-color);
} }
.detail-json { .detail-json {
margin: 0; margin: 0;
padding: 0.75rem; padding: 0.75rem;
background: var(--color-bg); background: var(--fs-surface-page);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
font-size: 0.8rem; font-size: 0.8rem;
overflow-x: auto; overflow-x: auto;
white-space: pre-wrap; white-space: pre-wrap;
+35 -35
View File
@@ -633,13 +633,13 @@ onUnmounted(() => assist.clearSelection());
gap: 0.75rem; gap: 0.75rem;
flex-wrap: wrap; flex-wrap: wrap;
padding-bottom: 0.5rem; padding-bottom: 0.5rem;
border-bottom: 1px solid var(--color-border); border-bottom: 1px solid var(--fs-border-color);
} }
.editor-tabs { .editor-tabs {
display: inline-flex; display: inline-flex;
background: var(--color-bg); background: var(--fs-surface-page);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: 8px; border-radius: 8px;
padding: 2px; padding: 2px;
gap: 2px; gap: 2px;
@@ -653,14 +653,14 @@ onUnmounted(() => assist.clearSelection());
padding: 0.22rem 0.75rem; padding: 0.22rem 0.75rem;
font-size: 0.78rem; font-size: 0.78rem;
font-weight: 500; font-weight: 500;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
cursor: pointer; cursor: pointer;
transition: background 0.15s, color 0.15s; transition: background 0.15s, color 0.15s;
} }
.tab:hover { color: var(--color-text); } .tab:hover { color: var(--fs-text-primary); }
.tab.active { .tab.active {
background: var(--color-surface); background: var(--fs-surface-hover);
color: var(--color-text); color: var(--fs-text-primary);
box-shadow: 0 1px 3px rgba(0,0,0,0.12); box-shadow: 0 1px 3px rgba(0,0,0,0.12);
} }
@@ -679,14 +679,14 @@ onUnmounted(() => assist.clearSelection());
.stream-label { .stream-label {
font-size: 0.8rem; font-size: 0.8rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
} }
.stream-preview { .stream-preview {
border: 1px solid var(--color-input-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
padding: 0.75rem; padding: 0.75rem;
background: var(--color-bg-card); background: var(--fs-surface-raised);
min-height: 200px; min-height: 200px;
} }
@@ -699,7 +699,7 @@ onUnmounted(() => assist.clearSelection());
.note-sidebar { .note-sidebar {
width: 280px; width: 280px;
flex-shrink: 0; flex-shrink: 0;
border-left: 1px solid var(--color-border); border-left: 1px solid var(--fs-border-color);
overflow-y: auto; overflow-y: auto;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
@@ -708,17 +708,17 @@ onUnmounted(() => assist.clearSelection());
.sb-select, .sb-input { .sb-select, .sb-input {
width: 100%; width: 100%;
padding: 5px 8px; padding: 5px 8px;
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
border: 1px solid var(--color-input-border); border: 1px solid var(--fs-border-color);
background: var(--color-bg-tertiary); background: var(--fs-surface-hover);
color: var(--color-text); color: var(--fs-text-primary);
font-size: 0.82rem; font-size: 0.82rem;
font-family: inherit; font-family: inherit;
outline: none; outline: none;
transition: border-color 0.15s; transition: border-color 0.15s;
} }
.sb-select:focus, .sb-input:focus { .sb-select:focus, .sb-input:focus {
border-color: var(--color-primary); border-color: var(--fs-accent);
} }
/* Tag suggest row inside sidebar */ /* Tag suggest row inside sidebar */
@@ -742,13 +742,13 @@ onUnmounted(() => assist.clearSelection());
font-size: 0.72rem; font-size: 0.72rem;
padding: 0.15rem 0.5rem; padding: 0.15rem 0.5rem;
background: none; background: none;
border: 1px solid var(--color-primary); border: 1px solid var(--fs-accent);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
color: var(--color-primary); color: var(--fs-accent);
cursor: pointer; cursor: pointer;
font-family: inherit; 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 { .link-suggest-list {
display: flex; display: flex;
@@ -766,14 +766,14 @@ onUnmounted(() => assist.clearSelection());
.link-suggest-title { .link-suggest-title {
flex: 1; flex: 1;
font-family: monospace; font-family: monospace;
color: var(--color-primary); color: var(--fs-accent);
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
white-space: nowrap; white-space: nowrap;
} }
.link-suggest-count { .link-suggest-count {
color: var(--color-text-muted); color: var(--fs-text-tertiary);
font-size: 0.72rem; font-size: 0.72rem;
flex-shrink: 0; flex-shrink: 0;
} }
@@ -783,13 +783,13 @@ onUnmounted(() => assist.clearSelection());
font-size: 0.72rem; font-size: 0.72rem;
padding: 0.1rem 0.4rem; padding: 0.1rem 0.4rem;
background: none; background: none;
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
cursor: pointer; cursor: pointer;
font-family: inherit; 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 */ /* Writing Assistant section */
.assist-section { .assist-section {
@@ -801,7 +801,7 @@ onUnmounted(() => assist.clearSelection());
.assist-section-title { .assist-section-title {
font-size: 0.78rem; font-size: 0.78rem;
font-weight: 500; font-weight: 500;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
text-transform: uppercase; text-transform: uppercase;
letter-spacing: 0.05em; letter-spacing: 0.05em;
} }
@@ -810,19 +810,19 @@ onUnmounted(() => assist.clearSelection());
.ef-label { .ef-label {
font-family: 'Fraunces', Georgia, serif; font-family: 'Fraunces', Georgia, serif;
font-size: 0.92rem; font-size: 0.92rem;
color: var(--color-primary); color: var(--fs-accent);
} }
.prompt-editor { .prompt-editor {
width: 100%; width: 100%;
min-height: 60vh; min-height: 60vh;
margin-top: 8px; margin-top: 8px;
padding: 14px 16px; padding: 14px 16px;
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: 8px; border-radius: 8px;
background: var(--color-surface); background: var(--fs-surface-hover);
color: var(--color-text); color: var(--fs-text-primary);
/* Prompts are plain markdown — a code-style editor, not rich text. */ /* 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; font-size: 0.88rem;
line-height: 1.55; line-height: 1.55;
tab-size: 2; tab-size: 2;
@@ -830,7 +830,7 @@ onUnmounted(() => assist.clearSelection());
outline: none; outline: none;
} }
.prompt-editor:focus { .prompt-editor:focus {
border-color: var(--color-primary); border-color: var(--fs-accent);
} }
/* Narrow screen: sidebar collapses */ /* Narrow screen: sidebar collapses */
@media (max-width: 720px) { @media (max-width: 720px) {
@@ -839,7 +839,7 @@ onUnmounted(() => assist.clearSelection());
.note-sidebar { .note-sidebar {
width: 100%; width: 100%;
border-left: none; border-left: none;
border-top: 1px solid var(--color-border); border-top: 1px solid var(--fs-border-color);
overflow-y: visible; overflow-y: visible;
} }
} }
+19 -19
View File
@@ -340,7 +340,7 @@ async function convertToTask() {
gap: 0.5rem; gap: 0.5rem;
flex-wrap: wrap; flex-wrap: wrap;
font-size: 0.83rem; font-size: 0.83rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
margin: 0 0 0.75rem; margin: 0 0 0.75rem;
} }
.meta-item { .meta-item {
@@ -359,7 +359,7 @@ async function convertToTask() {
} }
.backlinks { .backlinks {
margin-top: 2.5rem; margin-top: 2.5rem;
border-top: 1px solid var(--color-border); border-top: 1px solid var(--fs-border-color);
padding-top: 1.25rem; padding-top: 1.25rem;
} }
.backlinks-heading { .backlinks-heading {
@@ -370,14 +370,14 @@ async function convertToTask() {
font-weight: 500; font-weight: 500;
text-transform: uppercase; text-transform: uppercase;
letter-spacing: 0.06em; letter-spacing: 0.06em;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
margin: 0 0 0.75rem; margin: 0 0 0.75rem;
} }
.backlinks-count { .backlinks-count {
margin-left: 0.2rem; margin-left: 0.2rem;
font-size: 0.72rem; font-size: 0.72rem;
background: var(--color-bg-secondary); background: var(--fs-surface-raised);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: 999px; border-radius: 999px;
padding: 0 0.4rem; padding: 0 0.4rem;
line-height: 1.4; line-height: 1.4;
@@ -392,18 +392,18 @@ async function convertToTask() {
align-items: center; align-items: center;
gap: 0.6rem; gap: 0.6rem;
padding: 0.5rem 0.75rem; padding: 0.5rem 0.75rem;
border-radius: var(--radius-md); border-radius: var(--fs-radius-lg);
background: var(--color-bg-card); background: var(--fs-surface-raised);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
text-decoration: none; text-decoration: none;
color: var(--color-text); color: var(--fs-text-primary);
transition: border-color 0.15s, box-shadow 0.15s; transition: border-color 0.15s, box-shadow 0.15s;
font-size: 0.9rem; font-size: 0.9rem;
} }
.backlink-card:hover { .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); box-shadow: 0 2px 8px rgba(0,0,0,0.06);
color: var(--color-primary); color: var(--fs-accent);
} }
.backlink-type-badge { .backlink-type-badge {
font-size: 0.68rem; font-size: 0.68rem;
@@ -415,9 +415,9 @@ async function convertToTask() {
flex-shrink: 0; flex-shrink: 0;
} }
.badge-note { .badge-note {
background: color-mix(in srgb, var(--color-primary) 12%, transparent); background: color-mix(in srgb, var(--fs-accent) 12%, transparent);
color: var(--color-primary); color: var(--fs-accent);
border: 1px solid color-mix(in srgb, var(--color-primary) 25%, transparent); border: 1px solid color-mix(in srgb, var(--fs-accent) 25%, transparent);
} }
.badge-task { .badge-task {
background: color-mix(in srgb, #f59e0b 12%, transparent); background: color-mix(in srgb, #f59e0b 12%, transparent);
@@ -446,12 +446,12 @@ async function convertToTask() {
.skel-title, .skel-title,
.skel-meta, .skel-meta,
.skel-line { .skel-line {
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
background: linear-gradient( background: linear-gradient(
90deg, 90deg,
var(--color-bg-secondary) 25%, var(--fs-surface-raised) 25%,
color-mix(in srgb, var(--color-text-muted) 18%, var(--color-bg-secondary)) 50%, color-mix(in srgb, var(--fs-text-tertiary) 18%, var(--fs-surface-raised)) 50%,
var(--color-bg-secondary) 75% var(--fs-surface-raised) 75%
); );
background-size: 200% 100%; background-size: 200% 100%;
animation: skel-shine 1.5s ease infinite; animation: skel-shine 1.5s ease infinite;
@@ -463,7 +463,7 @@ async function convertToTask() {
} }
.skel-btn { width: 70px; height: 32px; } .skel-btn { width: 70px; height: 32px; }
.skel-btn--wide { width: 90px; } .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-meta { height: 0.85rem; width: 40%; }
.skel-line { height: 0.9rem; } .skel-line { height: 0.9rem; }
.skel-line--short { width: 55%; } .skel-line--short { width: 55%; }
+55 -55
View File
@@ -317,9 +317,9 @@ function overallPct(project: Project): { total: number; pct: number } {
<style scoped> <style scoped>
.projects-list { .projects-list {
max-width: var(--page-max-width); max-width: var(--fs-layout-page-max);
margin: 2rem auto; margin: 2rem auto;
padding: 0 var(--page-padding-x); padding: 0 var(--fs-layout-page-pad);
overflow-x: clip; overflow-x: clip;
} }
@@ -340,7 +340,7 @@ function overallPct(project: Project): { total: number; pct: number } {
display: flex; display: flex;
gap: 0.25rem; gap: 0.25rem;
margin-bottom: 1.25rem; margin-bottom: 1.25rem;
border-bottom: 1px solid var(--color-border); border-bottom: 1px solid var(--fs-border-color);
padding-bottom: 0; padding-bottom: 0;
} }
.tab-btn { .tab-btn {
@@ -350,40 +350,40 @@ function overallPct(project: Project): { total: number; pct: number } {
border-bottom: 2px solid transparent; border-bottom: 2px solid transparent;
cursor: pointer; cursor: pointer;
font-size: 0.875rem; font-size: 0.875rem;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
font-family: inherit; font-family: inherit;
margin-bottom: -1px; margin-bottom: -1px;
} }
.tab-btn:hover { .tab-btn:hover {
color: var(--color-primary); color: var(--fs-accent);
} }
.tab-btn.active { .tab-btn.active {
color: var(--color-primary); color: var(--fs-accent);
border-bottom-color: var(--color-primary); border-bottom-color: var(--fs-accent);
font-weight: 500; font-weight: 500;
} }
.loading-msg, .loading-msg,
.error-msg { .error-msg {
color: var(--color-text-muted); color: var(--fs-text-tertiary);
font-size: 0.9rem; font-size: 0.9rem;
margin-top: 1rem; margin-top: 1rem;
} }
.error-msg { .error-msg {
color: var(--color-danger); color: var(--fs-error);
} }
.empty-state-rich { text-align: center; padding: 3rem 1rem; color: var(--color-text-muted); } .empty-state-rich { text-align: center; padding: 3rem 1rem; color: var(--fs-text-tertiary); }
.empty-icon { font-size: 2.5rem; margin-bottom: 0.75rem; opacity: 0.3; } .empty-icon { font-size: 2.5rem; margin-bottom: 0.75rem; opacity: 0.3; }
.empty-title { font-size: 1rem; font-weight: 500; color: var(--color-text-secondary); margin: 0 0 0.35rem; } .empty-title { font-size: 1rem; font-weight: 500; color: var(--fs-text-secondary); margin: 0 0 0.35rem; }
.empty-sub { font-size: 0.85rem; margin: 0 0 1rem; } .empty-sub { font-size: 0.85rem; margin: 0 0 1rem; }
.empty-action { display: inline-block; padding: 0.4rem 1rem; border: 1px solid var(--color-action-primary); border-radius: var(--radius-sm); color: var(--color-action-primary); background: none; cursor: pointer; font-size: 0.85rem; transition: background 0.15s, color 0.15s; } .empty-action { display: inline-block; padding: 0.4rem 1rem; border: 1px solid var(--fs-action-primary); border-radius: var(--fs-radius-sm); color: var(--fs-action-primary); background: none; cursor: pointer; font-size: 0.85rem; transition: background 0.15s, color 0.15s; }
.empty-action:hover { background: var(--color-action-primary); color: var(--fs-text-on-action); } .empty-action:hover { background: var(--fs-action-primary); color: var(--fs-text-on-action); }
.skeleton-card { .skeleton-card {
height: 140px; height: 140px;
border-radius: var(--radius-md); border-radius: var(--fs-radius-lg);
background: linear-gradient(90deg, var(--color-bg-secondary) 25%, var(--color-border) 50%, var(--color-bg-secondary) 75%); background: linear-gradient(90deg, var(--fs-surface-raised) 25%, var(--fs-border-color) 50%, var(--fs-surface-raised) 75%);
background-size: 200% 100%; background-size: 200% 100%;
animation: skeleton-shimmer 1.4s ease infinite; animation: skeleton-shimmer 1.4s ease infinite;
} }
@@ -404,9 +404,9 @@ function overallPct(project: Project): { total: number; pct: number } {
} }
.project-card { .project-card {
background: var(--color-bg-card); background: var(--fs-surface-raised);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-md); border-radius: var(--fs-radius-lg);
padding: 1rem 1.1rem; padding: 1rem 1.1rem;
cursor: pointer; cursor: pointer;
transition: border-color 0.15s, box-shadow 0.15s, transform 0.18s ease; transition: border-color 0.15s, box-shadow 0.15s, transform 0.18s ease;
@@ -415,7 +415,7 @@ function overallPct(project: Project): { total: number; pct: number } {
gap: 0.5rem; gap: 0.5rem;
} }
.project-card:hover { .project-card:hover {
border-color: var(--color-primary); border-color: var(--fs-accent);
box-shadow: 0 2px 8px var(--color-shadow); box-shadow: 0 2px 8px var(--color-shadow);
transform: translateY(-2px); transform: translateY(-2px);
} }
@@ -429,7 +429,7 @@ function overallPct(project: Project): { total: number; pct: number } {
.project-title { .project-title {
font-size: 1rem; font-size: 1rem;
font-weight: 500; font-weight: 500;
color: var(--color-text); color: var(--fs-text-primary);
min-width: 0; min-width: 0;
flex: 1; flex: 1;
word-break: break-word; word-break: break-word;
@@ -446,32 +446,32 @@ function overallPct(project: Project): { total: number; pct: number } {
white-space: nowrap; white-space: nowrap;
} }
.status-active { .status-active {
background: color-mix(in srgb, var(--color-success) 15%, transparent); background: color-mix(in srgb, var(--fs-success) 15%, transparent);
color: var(--color-success); color: var(--fs-success);
} }
.status-completed { .status-completed {
background: color-mix(in srgb, var(--color-primary) 15%, transparent); background: color-mix(in srgb, var(--fs-accent) 15%, transparent);
color: var(--color-primary); color: var(--fs-accent);
} }
.status-archived { .status-archived {
background: color-mix(in srgb, var(--color-text-muted) 15%, transparent); background: color-mix(in srgb, var(--fs-text-tertiary) 15%, transparent);
color: var(--color-text-muted); color: var(--fs-text-tertiary);
} }
.project-goal { .project-goal {
font-size: 0.875rem; font-size: 0.875rem;
color: var(--color-text); color: var(--fs-text-primary);
margin: 0; margin: 0;
line-height: 1.4; line-height: 1.4;
} }
.field-label { .field-label {
font-weight: 500; font-weight: 500;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
} }
.project-desc { .project-desc {
font-size: 0.82rem; font-size: 0.82rem;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
margin: 0; margin: 0;
line-height: 1.45; line-height: 1.45;
} }
@@ -486,18 +486,18 @@ function overallPct(project: Project): { total: number; pct: number } {
.overall-bar-track { .overall-bar-track {
flex: 1; flex: 1;
height: 6px; height: 6px;
background: var(--color-border); background: var(--fs-border-color);
border-radius: 999px; border-radius: 999px;
overflow: hidden; overflow: hidden;
} }
.overall-bar-fill { .overall-bar-fill {
height: 100%; height: 100%;
border-radius: 999px; border-radius: 999px;
background: var(--color-primary); background: var(--fs-accent);
transition: width 0.3s ease; transition: width 0.3s ease;
} }
.overall-bar-pct { .overall-bar-pct {
color: var(--color-text-secondary); color: var(--fs-text-secondary);
flex-shrink: 0; flex-shrink: 0;
min-width: 2.5rem; min-width: 2.5rem;
text-align: right; text-align: right;
@@ -517,7 +517,7 @@ function overallPct(project: Project): { total: number; pct: number } {
font-size: 0.72rem; font-size: 0.72rem;
} }
.milestone-bar-label { .milestone-bar-label {
color: var(--color-text-secondary); color: var(--fs-text-secondary);
min-width: 0; min-width: 0;
flex: 0 0 30%; flex: 0 0 30%;
overflow: hidden; overflow: hidden;
@@ -527,7 +527,7 @@ function overallPct(project: Project): { total: number; pct: number } {
.milestone-bar-track { .milestone-bar-track {
flex: 1; flex: 1;
height: 5px; height: 5px;
background: var(--color-border); background: var(--fs-border-color);
border-radius: 999px; border-radius: 999px;
overflow: hidden; overflow: hidden;
} }
@@ -537,7 +537,7 @@ function overallPct(project: Project): { total: number; pct: number } {
transition: width 0.3s ease; transition: width 0.3s ease;
} }
.milestone-bar-pct { .milestone-bar-pct {
color: var(--color-text-muted); color: var(--fs-text-tertiary);
flex-shrink: 0; flex-shrink: 0;
min-width: 2.5rem; min-width: 2.5rem;
text-align: right; text-align: right;
@@ -546,7 +546,7 @@ function overallPct(project: Project): { total: number; pct: number } {
/* Deliberately quiet — it is a footnote about what is not shown, not another /* Deliberately quiet — it is a footnote about what is not shown, not another
row competing with the bars above it. */ row competing with the bars above it. */
.milestone-more { .milestone-more {
color: var(--color-text-muted); color: var(--fs-text-tertiary);
font-size: var(--fs-size-tiny); font-size: var(--fs-size-tiny);
padding-top: 0.15rem; padding-top: 0.15rem;
} }
@@ -556,23 +556,23 @@ function overallPct(project: Project): { total: number; pct: number } {
} }
.meta-date { .meta-date {
font-size: 0.75rem; font-size: 0.75rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
} }
/* Modal */ /* Modal */
.modal-overlay { .modal-overlay {
position: fixed; position: fixed;
inset: 0; inset: 0;
background: var(--color-overlay); background: var(--fs-overlay);
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
z-index: 200; z-index: 200;
} }
.modal-card { .modal-card {
background: var(--color-bg-card); background: var(--fs-surface-raised);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-md); border-radius: var(--fs-radius-lg);
padding: 1.5rem; padding: 1.5rem;
width: 100%; width: 100%;
max-width: 480px; max-width: 480px;
@@ -593,18 +593,18 @@ function overallPct(project: Project): { total: number; pct: number } {
.modal-field label { .modal-field label {
font-size: 0.875rem; font-size: 0.875rem;
font-weight: 500; font-weight: 500;
color: var(--color-text); color: var(--fs-text-primary);
} }
.required { .required {
color: var(--color-danger); color: var(--fs-error);
} }
.modal-input, .modal-input,
.modal-textarea { .modal-textarea {
padding: 0.45rem 0.7rem; padding: 0.45rem 0.7rem;
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
background: var(--color-bg); background: var(--fs-surface-page);
color: var(--color-text); color: var(--fs-text-primary);
font-size: 0.9rem; font-size: 0.9rem;
font-family: inherit; font-family: inherit;
box-sizing: border-box; box-sizing: border-box;
@@ -613,7 +613,7 @@ function overallPct(project: Project): { total: number; pct: number } {
.modal-input:focus, .modal-input:focus,
.modal-textarea:focus { .modal-textarea:focus {
outline: none; outline: none;
border-color: var(--color-primary); border-color: var(--fs-accent);
} }
.modal-textarea { .modal-textarea {
resize: vertical; resize: vertical;
@@ -625,20 +625,20 @@ function overallPct(project: Project): { total: number; pct: number } {
} }
.modal-btn { .modal-btn {
padding: 0.4rem 0.9rem; padding: 0.4rem 0.9rem;
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
background: var(--color-bg-secondary); background: var(--fs-surface-raised);
color: var(--color-text); color: var(--fs-text-primary);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
cursor: pointer; cursor: pointer;
font-size: 0.875rem; font-size: 0.875rem;
font-family: inherit; font-family: inherit;
} }
.modal-btn:hover { .modal-btn:hover {
background: var(--color-bg); background: var(--fs-surface-page);
} }
.modal-btn-primary { .modal-btn-primary {
background: var(--color-action-primary); background: var(--fs-action-primary);
border-color: var(--color-action-primary); border-color: var(--fs-action-primary);
color: var(--fs-text-on-action); color: var(--fs-text-on-action);
} }
.modal-btn-primary:hover:not(:disabled) { .modal-btn-primary:hover:not(:disabled) {
+140 -140
View File
@@ -932,9 +932,9 @@ async function confirmDelete() {
<style scoped> <style scoped>
/* ── Layout ─────────────────────────────────────────────────── */ /* ── Layout ─────────────────────────────────────────────────── */
.project-view { .project-view {
max-width: var(--page-max-width); max-width: var(--fs-layout-page-max);
margin: 2rem auto; margin: 2rem auto;
padding: 0 var(--page-padding-x); padding: 0 var(--fs-layout-page-pad);
overflow-x: clip; overflow-x: clip;
} }
@@ -947,9 +947,9 @@ async function confirmDelete() {
} }
.page-header-actions { display: flex; gap: 0.5rem; align-items: center; } .page-header-actions { display: flex; gap: 0.5rem; align-items: center; }
.plan-title-input { .plan-title-input {
background: var(--color-bg); background: var(--fs-surface-page);
color: inherit; color: inherit;
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: 6px; border-radius: 6px;
padding: 0.4rem 0.6rem; padding: 0.4rem 0.6rem;
font: inherit; font: inherit;
@@ -961,7 +961,7 @@ async function confirmDelete() {
font-size: 1.75rem; font-size: 1.75rem;
font-weight: 500; font-weight: 500;
font-family: "Fraunces", Georgia, serif; font-family: "Fraunces", Georgia, serif;
color: var(--color-text); color: var(--fs-text-primary);
background: transparent; background: transparent;
border: none; border: none;
border-bottom: 1.5px solid transparent; border-bottom: 1.5px solid transparent;
@@ -970,8 +970,8 @@ async function confirmDelete() {
min-width: 0; min-width: 0;
transition: border-color 0.15s; transition: border-color 0.15s;
} }
.project-title-input:focus { border-bottom-color: var(--color-primary); } .project-title-input:focus { border-bottom-color: var(--fs-accent); }
.project-title-input::placeholder { color: var(--color-text-muted); font-weight: 400; } .project-title-input::placeholder { color: var(--fs-text-tertiary); font-weight: 400; }
.status-badge { .status-badge {
font-size: 0.68rem; font-size: 0.68rem;
@@ -982,14 +982,14 @@ async function confirmDelete() {
border-radius: 999px; border-radius: 999px;
flex-shrink: 0; flex-shrink: 0;
} }
.status-active { background: color-mix(in srgb, var(--color-success) 14%, transparent); color: var(--color-success); border: 1px solid color-mix(in srgb, var(--color-success) 30%, transparent); } .status-active { background: color-mix(in srgb, var(--fs-success) 14%, transparent); color: var(--fs-success); border: 1px solid color-mix(in srgb, var(--fs-success) 30%, transparent); }
.status-paused { background: color-mix(in srgb, var(--color-warning) 14%, transparent); color: var(--color-warning); border: 1px solid color-mix(in srgb, var(--color-warning) 30%, transparent); } .status-paused { background: color-mix(in srgb, var(--fs-warning) 14%, transparent); color: var(--fs-warning); border: 1px solid color-mix(in srgb, var(--fs-warning) 30%, transparent); }
.status-completed { background: color-mix(in srgb, var(--color-primary) 14%, transparent); color: var(--color-primary); border: 1px solid color-mix(in srgb, var(--color-primary) 30%, transparent); } .status-completed { background: color-mix(in srgb, var(--fs-accent) 14%, transparent); color: var(--fs-accent); border: 1px solid color-mix(in srgb, var(--fs-accent) 30%, transparent); }
.status-archived { background: color-mix(in srgb, var(--color-text-muted) 14%, transparent); color: var(--color-text-muted); border: 1px solid color-mix(in srgb, var(--color-text-muted) 30%, transparent); } .status-archived { background: color-mix(in srgb, var(--fs-text-tertiary) 14%, transparent); color: var(--fs-text-tertiary); border: 1px solid color-mix(in srgb, var(--fs-text-tertiary) 30%, transparent); }
.project-goal { .project-goal {
font-size: 1rem; font-size: 1rem;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
margin: 0 0 0.3rem; margin: 0 0 0.3rem;
line-height: 1.45; line-height: 1.45;
} }
@@ -998,7 +998,7 @@ async function confirmDelete() {
align-items: center; align-items: center;
gap: 0.3rem; gap: 0.3rem;
font-size: 0.78rem; font-size: 0.78rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
margin: 0; margin: 0;
} }
@@ -1015,7 +1015,7 @@ async function confirmDelete() {
align-items: center; align-items: center;
gap: 0.35rem; gap: 0.35rem;
padding: 0.3rem 0.65rem; padding: 0.3rem 0.65rem;
border-radius: var(--radius-md); border-radius: var(--fs-radius-lg);
font-size: 0.82rem; font-size: 0.82rem;
border: 1px solid; border: 1px solid;
} }
@@ -1028,14 +1028,14 @@ async function confirmDelete() {
border-radius: 50%; border-radius: 50%;
flex-shrink: 0; flex-shrink: 0;
} }
.dot-todo { background: transparent; border: 2px solid var(--color-text-muted); } .dot-todo { background: transparent; border: 2px solid var(--fs-text-tertiary); }
.dot-inprogress { background: var(--color-status-in-progress); } .dot-inprogress { background: var(--fs-status-in-progress); }
.dot-done { background: var(--color-status-done); } .dot-done { background: var(--fs-status-done); }
.stat-todo { background: color-mix(in srgb, var(--color-text-muted) 8%, transparent); color: var(--color-text-secondary); border-color: var(--color-border); } .stat-todo { background: color-mix(in srgb, var(--fs-text-tertiary) 8%, transparent); color: var(--fs-text-secondary); border-color: var(--fs-border-color); }
.stat-inprogress { background: color-mix(in srgb, #3b82f6 10%, transparent); color: #3b82f6; border-color: color-mix(in srgb, #3b82f6 28%, transparent); } .stat-inprogress { background: color-mix(in srgb, #3b82f6 10%, transparent); color: #3b82f6; border-color: color-mix(in srgb, #3b82f6 28%, transparent); }
.stat-done { background: color-mix(in srgb, var(--color-success) 10%, transparent); color: var(--color-success); border-color: color-mix(in srgb, var(--color-success) 28%, transparent); } .stat-done { background: color-mix(in srgb, var(--fs-success) 10%, transparent); color: var(--fs-success); border-color: color-mix(in srgb, var(--fs-success) 28%, transparent); }
.stat-notes { background: color-mix(in srgb, var(--color-primary) 8%, transparent); color: var(--color-primary); border-color: color-mix(in srgb, var(--color-primary) 22%, transparent); } .stat-notes { background: color-mix(in srgb, var(--fs-accent) 8%, transparent); color: var(--fs-accent); border-color: color-mix(in srgb, var(--fs-accent) 22%, transparent); }
/* ── Two-column body ─────────────────────────────────────────── */ /* ── Two-column body ─────────────────────────────────────────── */
/* `minmax(0, 1fr)`, not `1fr`. A bare `1fr` track has an AUTO minimum, so it /* `minmax(0, 1fr)`, not `1fr`. A bare `1fr` track has an AUTO minimum, so it
@@ -1059,9 +1059,9 @@ async function confirmDelete() {
/* ── Edit panel ──────────────────────────────────────────────── */ /* ── Edit panel ──────────────────────────────────────────────── */
.edit-panel { .edit-panel {
background: var(--color-bg-card); background: var(--fs-surface-raised);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-md); border-radius: var(--fs-radius-lg);
padding: 1rem 1.1rem; padding: 1rem 1.1rem;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
@@ -1075,28 +1075,28 @@ async function confirmDelete() {
font-weight: 500; font-weight: 500;
text-transform: uppercase; text-transform: uppercase;
letter-spacing: 0.06em; letter-spacing: 0.06em;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
} }
.edit-field { display: flex; flex-direction: column; gap: 0.3rem; } .edit-field { display: flex; flex-direction: column; gap: 0.3rem; }
.edit-label { .edit-label {
font-size: 0.75rem; font-size: 0.75rem;
font-weight: 500; font-weight: 500;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
text-transform: uppercase; text-transform: uppercase;
letter-spacing: 0.03em; letter-spacing: 0.03em;
} }
.edit-input, .edit-textarea, .edit-select { .edit-input, .edit-textarea, .edit-select {
padding: 0.4rem 0.6rem; padding: 0.4rem 0.6rem;
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
background: var(--color-bg); background: var(--fs-surface-page);
color: var(--color-text); color: var(--fs-text-primary);
font-size: 0.875rem; font-size: 0.875rem;
font-family: inherit; font-family: inherit;
box-sizing: border-box; box-sizing: border-box;
width: 100%; width: 100%;
} }
.edit-input:focus, .edit-textarea:focus, .edit-select:focus { outline: none; border-color: var(--color-primary); } .edit-input:focus, .edit-textarea:focus, .edit-select:focus { outline: none; border-color: var(--fs-accent); }
.edit-textarea { resize: vertical; } .edit-textarea { resize: vertical; }
/* Save panel: Moss action-primary per Hybrid rule */ /* Save panel: Moss action-primary per Hybrid rule */
@@ -1110,27 +1110,27 @@ async function confirmDelete() {
border-bottom: 2px solid transparent; border-bottom: 2px solid transparent;
cursor: pointer; cursor: pointer;
font-size: 0.875rem; font-size: 0.875rem;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
font-family: inherit; font-family: inherit;
margin-bottom: -1px; margin-bottom: -1px;
transition: color 0.15s; transition: color 0.15s;
} }
.tab-btn:hover { color: var(--color-primary); } .tab-btn:hover { color: var(--fs-accent); }
.tab-btn.active { color: var(--color-primary); border-bottom-color: var(--color-primary); font-weight: 500; } .tab-btn.active { color: var(--fs-accent); border-bottom-color: var(--fs-accent); font-weight: 500; }
.tab-count { .tab-count {
font-size: 0.7rem; font-size: 0.7rem;
font-weight: 500; font-weight: 500;
background: var(--color-bg-secondary); background: var(--fs-surface-raised);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: 999px; border-radius: 999px;
padding: 0 0.4rem; padding: 0 0.4rem;
line-height: 1.5; line-height: 1.5;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
} }
.tab-btn.active .tab-count { .tab-btn.active .tab-count {
background: color-mix(in srgb, var(--color-primary) 12%, transparent); background: color-mix(in srgb, var(--fs-accent) 12%, transparent);
border-color: color-mix(in srgb, var(--color-primary) 30%, transparent); border-color: color-mix(in srgb, var(--fs-accent) 30%, transparent);
color: var(--color-primary); color: var(--fs-accent);
} }
/* ── Tasks view ──────────────────────────────────────────────── */ /* ── Tasks view ──────────────────────────────────────────────── */
@@ -1139,28 +1139,28 @@ async function confirmDelete() {
.milestone-actions { display: flex; align-items: center; } .milestone-actions { display: flex; align-items: center; }
.btn-add-milestone { .btn-add-milestone {
background: none; background: none;
border: 1px dashed var(--color-border); border: 1px dashed var(--fs-border-color);
color: var(--color-text-secondary); color: var(--fs-text-secondary);
padding: 0.28rem 0.65rem; padding: 0.28rem 0.65rem;
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
cursor: pointer; cursor: pointer;
font-size: 0.78rem; font-size: 0.78rem;
font-family: inherit; font-family: inherit;
} }
.btn-add-milestone:hover { border-color: var(--color-primary); color: var(--color-primary); } .btn-add-milestone:hover { border-color: var(--fs-accent); color: var(--fs-accent); }
.new-milestone-row { display: flex; gap: 0.4rem; align-items: center; flex: 1; } .new-milestone-row { display: flex; gap: 0.4rem; align-items: center; flex: 1; }
.milestone-title-input { .milestone-title-input {
flex: 1; flex: 1;
padding: 0.3rem 0.5rem; padding: 0.3rem 0.5rem;
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
background: var(--color-bg); background: var(--fs-surface-page);
color: var(--color-text); color: var(--fs-text-primary);
font-size: 0.875rem; font-size: 0.875rem;
font-family: inherit; font-family: inherit;
} }
.milestone-title-input:focus { outline: none; border-color: var(--color-primary); } .milestone-title-input:focus { outline: none; border-color: var(--fs-accent); }
/* Milestone confirm: Moss action-primary; Cancel: Bronze action-secondary */ /* Milestone confirm: Moss action-primary; Cancel: Bronze action-secondary */
/* RESTORED. Both of these lost their base rule to a CSS sweep and left only /* RESTORED. Both of these lost their base rule to a CSS sweep and left only
modifiers behind — `.milestone-header.clickable`, `.milestone-header:hover`. modifiers behind — `.milestone-header.clickable`, `.milestone-header:hover`.
@@ -1170,9 +1170,9 @@ async function confirmDelete() {
the "uses space poorly" the operator saw, and it was a deletion rather than a the "uses space poorly" the operator saw, and it was a deletion rather than a
design change. A dangling `:hover` is the tell, and it is now checked for. */ design change. A dangling `:hover` is the tell, and it is now checked for. */
.milestone-group { .milestone-group {
background: var(--color-bg-card); background: var(--fs-surface-raised);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-md); border-radius: var(--fs-radius-lg);
overflow: hidden; overflow: hidden;
margin-bottom: 0.75rem; margin-bottom: 0.75rem;
} }
@@ -1182,20 +1182,20 @@ async function confirmDelete() {
align-items: center; align-items: center;
gap: 0.5rem; gap: 0.5rem;
padding: 0.5rem 0.85rem; padding: 0.5rem 0.85rem;
background: var(--color-bg-secondary); background: var(--fs-surface-raised);
} }
.milestone-header.clickable { cursor: pointer; } .milestone-header.clickable { cursor: pointer; }
.milestone-header.clickable:hover { background: color-mix(in srgb, var(--color-primary) 4%, var(--color-bg-secondary)); } .milestone-header.clickable:hover { background: color-mix(in srgb, var(--fs-accent) 4%, var(--fs-surface-raised)); }
/* Plan body: the milestone's design/intent, shown above its task columns. */ /* Plan body: the milestone's design/intent, shown above its task columns. */
.ms-plan { .ms-plan {
padding: 0.6rem 0.85rem; padding: 0.6rem 0.85rem;
background: color-mix(in srgb, var(--color-primary) 3%, var(--color-bg-card)); background: color-mix(in srgb, var(--fs-accent) 3%, var(--fs-surface-raised));
border-bottom: 1px solid var(--color-border); border-bottom: 1px solid var(--fs-border-color);
} }
.ms-plan-rendered { font-size: 0.85rem; color: var(--color-text); cursor: text; } .ms-plan-rendered { font-size: 0.85rem; color: var(--fs-text-primary); cursor: text; }
.ms-plan-rendered:hover { background: color-mix(in srgb, var(--color-primary) 4%, transparent); } .ms-plan-rendered:hover { background: color-mix(in srgb, var(--fs-accent) 4%, transparent); }
/* max-height rather than -webkit-line-clamp: the body is rendered markdown, so /* max-height rather than -webkit-line-clamp: the body is rendered markdown, so
it holds headings, lists and tables. line-clamp counts lines inside ONE inline it holds headings, lists and tables. line-clamp counts lines inside ONE inline
@@ -1216,21 +1216,21 @@ async function confirmDelete() {
background: linear-gradient( background: linear-gradient(
to bottom, to bottom,
transparent, transparent,
color-mix(in srgb, var(--color-primary) 3%, var(--color-bg-card)) color-mix(in srgb, var(--fs-accent) 3%, var(--fs-surface-raised))
); );
pointer-events: none; /* the text under the fade stays clickable to edit */ pointer-events: none; /* the text under the fade stays clickable to edit */
} }
.ms-plan-toggle { padding-left: 0; margin-top: 0.15rem; } .ms-plan-toggle { padding-left: 0; margin-top: 0.15rem; }
.ms-plan-editor { .ms-plan-editor {
width: 100%; width: 100%;
font-family: var(--font-mono); font-family: var(--fs-font-mono);
font-size: 0.8rem; font-size: 0.8rem;
line-height: 1.5; line-height: 1.5;
padding: 0.5rem; padding: 0.5rem;
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: 6px; border-radius: 6px;
background: var(--color-bg); background: var(--fs-surface-page);
color: var(--color-text); color: var(--fs-text-primary);
resize: vertical; resize: vertical;
box-sizing: border-box; box-sizing: border-box;
} }
@@ -1241,19 +1241,19 @@ async function confirmDelete() {
padding: 0.3rem 0.75rem; padding: 0.3rem 0.75rem;
border-radius: 6px; border-radius: 6px;
cursor: pointer; cursor: pointer;
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
} }
.ms-plan-actions .btn-primary { background: var(--color-action-primary); color: var(--fs-text-on-action); border-color: var(--color-action-primary); } .ms-plan-actions .btn-primary { background: var(--fs-action-primary); color: var(--fs-text-on-action); border-color: var(--fs-action-primary); }
.ms-plan-actions .btn-primary:disabled { opacity: 0.6; cursor: default; } .ms-plan-actions .btn-primary:disabled { opacity: 0.6; cursor: default; }
.ms-plan-actions .btn-secondary { background: var(--color-bg-card); color: var(--color-text); } .ms-plan-actions .btn-secondary { background: var(--fs-surface-raised); color: var(--fs-text-primary); }
.ms-chevron { display: flex; align-items: center; color: var(--color-text-muted); flex-shrink: 0; } .ms-chevron { display: flex; align-items: center; color: var(--fs-text-tertiary); flex-shrink: 0; }
.ms-name { font-weight: 500; color: var(--color-text); flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .ms-name { font-weight: 500; color: var(--fs-text-primary); flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ms-count { .ms-count {
font-size: 0.7rem; font-size: 0.7rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
background: var(--color-bg-card); background: var(--fs-surface-raised);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: 999px; border-radius: 999px;
padding: 0.05rem 0.4rem; padding: 0.05rem 0.4rem;
flex-shrink: 0; flex-shrink: 0;
@@ -1262,18 +1262,18 @@ async function confirmDelete() {
.ms-progress-track { .ms-progress-track {
width: 72px; width: 72px;
height: 6px; height: 6px;
background: var(--color-border); background: var(--fs-border-color);
border-radius: 999px; border-radius: 999px;
overflow: hidden; overflow: hidden;
flex-shrink: 0; flex-shrink: 0;
} }
.ms-progress-fill { .ms-progress-fill {
height: 100%; height: 100%;
background: linear-gradient(90deg, var(--color-primary), color-mix(in srgb, var(--color-primary) 70%, var(--color-success))); background: linear-gradient(90deg, var(--fs-accent), color-mix(in srgb, var(--fs-accent) 70%, var(--fs-success)));
border-radius: 999px; border-radius: 999px;
transition: width 0.4s ease; transition: width 0.4s ease;
} }
.ms-pct { font-size: 0.72rem; color: var(--color-text-secondary); flex-shrink: 0; min-width: 2.4rem; text-align: right; font-weight: 500; } .ms-pct { font-size: 0.72rem; color: var(--fs-text-secondary); flex-shrink: 0; min-width: 2.4rem; text-align: right; font-weight: 500; }
.ms-actions { display: flex; gap: 0.15rem; margin-left: 0.2rem; opacity: 0; transition: opacity 0.15s; } .ms-actions { display: flex; gap: 0.15rem; margin-left: 0.2rem; opacity: 0; transition: opacity 0.15s; }
.milestone-header:hover .ms-actions { opacity: 1; } .milestone-header:hover .ms-actions { opacity: 1; }
@@ -1284,22 +1284,22 @@ async function confirmDelete() {
background: none; background: none;
border: none; border: none;
cursor: pointer; cursor: pointer;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
width: 24px; width: 24px;
height: 24px; height: 24px;
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
} }
.ms-action-btn:hover { background: var(--color-bg-card); color: var(--color-text); } .ms-action-btn:hover { background: var(--fs-surface-raised); color: var(--fs-text-primary); }
.ms-action-delete:hover { color: var(--color-danger); } .ms-action-delete:hover { color: var(--fs-error); }
.ms-rename-input { .ms-rename-input {
flex: 1; flex: 1;
min-width: 0; min-width: 0;
padding: 0.1rem 0.35rem; padding: 0.1rem 0.35rem;
border: 1px solid var(--color-primary); border: 1px solid var(--fs-accent);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
background: var(--color-bg); background: var(--fs-surface-page);
color: var(--color-text); color: var(--fs-text-primary);
font-size: 0.85rem; font-size: 0.85rem;
font-family: inherit; font-family: inherit;
font-weight: 500; font-weight: 500;
@@ -1316,20 +1316,20 @@ async function confirmDelete() {
gap: 0.75rem; gap: 0.75rem;
align-items: start; align-items: start;
padding: 0.75rem; padding: 0.75rem;
background: color-mix(in srgb, var(--color-bg) 60%, var(--color-bg-secondary)); background: color-mix(in srgb, var(--fs-surface-page) 60%, var(--fs-surface-raised));
} }
.kanban-col { .kanban-col {
background: var(--color-bg-secondary); background: var(--fs-surface-raised);
border-radius: var(--radius-md); border-radius: var(--fs-radius-lg);
padding: 0.65rem; padding: 0.65rem;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
gap: 0.4rem; gap: 0.4rem;
border-top: 3px solid; border-top: 3px solid;
} }
.col-todo { border-top-color: var(--color-border); } .col-todo { border-top-color: var(--fs-border-color); }
.col-inprogress { border-top-color: var(--color-status-in-progress); } .col-inprogress { border-top-color: var(--fs-status-in-progress); }
.col-done { border-top-color: var(--color-status-done); } .col-done { border-top-color: var(--fs-status-done); }
.kanban-col-header { .kanban-col-header {
display: flex; display: flex;
@@ -1339,18 +1339,18 @@ async function confirmDelete() {
font-weight: 500; font-weight: 500;
text-transform: uppercase; text-transform: uppercase;
letter-spacing: 0.05em; letter-spacing: 0.05em;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
margin-bottom: 0.3rem; margin-bottom: 0.3rem;
} }
.col-status-dot { width: 7px; height: 7px; border-radius: 50%; flex-shrink: 0; } .col-status-dot { width: 7px; height: 7px; border-radius: 50%; flex-shrink: 0; }
.col-label { flex: 1; } .col-label { flex: 1; }
.col-count { .col-count {
background: var(--color-bg-card); background: var(--fs-surface-raised);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: 999px; border-radius: 999px;
padding: 0.05rem 0.4rem; padding: 0.05rem 0.4rem;
font-size: 0.68rem; font-size: 0.68rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
font-weight: 500; font-weight: 500;
} }
.col-add-btn { .col-add-btn {
@@ -1359,40 +1359,40 @@ async function confirmDelete() {
justify-content: center; justify-content: center;
width: 18px; width: 18px;
height: 18px; height: 18px;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
text-decoration: none; text-decoration: none;
font-size: 1rem; font-size: 1rem;
line-height: 1; line-height: 1;
border-radius: 3px; border-radius: 3px;
margin-left: auto; margin-left: auto;
} }
.col-add-btn:hover { color: var(--color-primary); background: color-mix(in srgb, var(--color-primary) 10%, transparent); } .col-add-btn:hover { color: var(--fs-accent); background: color-mix(in srgb, var(--fs-accent) 10%, transparent); }
.kanban-cards { display: flex; flex-direction: column; gap: 0.3rem; } .kanban-cards { display: flex; flex-direction: column; gap: 0.3rem; }
.task-card { .task-card {
display: block; display: block;
background: var(--color-bg-card); background: var(--fs-surface-raised);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-left: 3px solid transparent; border-left: 3px solid transparent;
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
padding: 0.45rem 0.55rem; padding: 0.45rem 0.55rem;
text-decoration: none; text-decoration: none;
color: var(--color-text); color: var(--fs-text-primary);
font-size: 0.85rem; font-size: 0.85rem;
transition: border-color 0.12s, box-shadow 0.18s, transform 0.18s ease; transition: border-color 0.12s, box-shadow 0.18s, transform 0.18s ease;
box-shadow: 0 1px 3px rgba(0,0,0,0.04); box-shadow: 0 1px 3px rgba(0,0,0,0.04);
} }
.task-card:hover { .task-card:hover {
border-color: color-mix(in srgb, var(--color-primary) 50%, var(--color-border)); border-color: color-mix(in srgb, var(--fs-accent) 50%, var(--fs-border-color));
border-left-color: var(--color-primary); border-left-color: var(--fs-accent);
box-shadow: 0 3px 10px rgba(0,0,0,0.08); box-shadow: 0 3px 10px rgba(0,0,0,0.08);
transform: translateY(-2px); transform: translateY(-2px);
} }
/* Priority left-border colors */ /* Priority left-border colors */
.task-card.pri-high { border-left-color: var(--color-danger); } .task-card.pri-high { border-left-color: var(--fs-error); }
.task-card.pri-medium { border-left-color: #f59e0b; } .task-card.pri-medium { border-left-color: #f59e0b; }
.task-card.pri-low { border-left-color: var(--color-success); } .task-card.pri-low { border-left-color: var(--fs-success); }
.task-card-done { opacity: 0.65; } .task-card-done { opacity: 0.65; }
.task-card-done .task-title { text-decoration: line-through; } .task-card-done .task-title { text-decoration: line-through; }
@@ -1404,10 +1404,10 @@ async function confirmDelete() {
flex-shrink: 0; flex-shrink: 0;
display: inline-flex; align-items: center; justify-content: center; display: inline-flex; align-items: center; justify-content: center;
width: 1.4rem; height: 1.4rem; width: 1.4rem; height: 1.4rem;
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: 4px; border-radius: 4px;
background: transparent; background: transparent;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
font-size: 0.75rem; font-size: 0.75rem;
cursor: pointer; cursor: pointer;
opacity: 0; opacity: 0;
@@ -1415,8 +1415,8 @@ async function confirmDelete() {
line-height: 1; line-height: 1;
} }
.task-card:hover .task-advance-btn { opacity: 1; } .task-card:hover .task-advance-btn { opacity: 1; }
.task-advance-btn:hover { background: var(--color-action-primary); border-color: var(--color-action-primary); color: var(--fs-text-on-action); } .task-advance-btn:hover { background: var(--fs-action-primary); border-color: var(--fs-action-primary); color: var(--fs-text-on-action); }
.task-advance-btn--done:hover { background: var(--color-success); border-color: var(--color-success); color: var(--fs-text-on-action); } .task-advance-btn--done:hover { background: var(--fs-success); border-color: var(--fs-success); color: var(--fs-text-on-action); }
.task-advance-btn:disabled { opacity: 0.4; cursor: default; } .task-advance-btn:disabled { opacity: 0.4; cursor: default; }
.priority-dot { .priority-dot {
@@ -1425,18 +1425,18 @@ async function confirmDelete() {
border-radius: 50%; border-radius: 50%;
flex-shrink: 0; flex-shrink: 0;
} }
.dot-pri-high { background: var(--color-danger); } .dot-pri-high { background: var(--fs-error); }
.dot-pri-medium { background: #f59e0b; } .dot-pri-medium { background: #f59e0b; }
.dot-pri-low { background: var(--color-success); } .dot-pri-low { background: var(--fs-success); }
.due-date { font-size: 0.7rem; color: var(--color-text-muted); } .due-date { font-size: 0.7rem; color: var(--fs-text-tertiary); }
.col-empty { .col-empty {
text-align: center; text-align: center;
padding: 1.25rem 0.5rem; padding: 1.25rem 0.5rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
font-size: 0.78rem; font-size: 0.78rem;
border: 1px dashed var(--color-border); border: 1px dashed var(--fs-border-color);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
opacity: 0.7; opacity: 0.7;
} }
@@ -1447,62 +1447,62 @@ async function confirmDelete() {
align-items: center; align-items: center;
gap: 0.6rem; gap: 0.6rem;
padding: 0.6rem 0.9rem; padding: 0.6rem 0.9rem;
background: var(--color-bg-card); background: var(--fs-surface-raised);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
text-decoration: none; text-decoration: none;
color: var(--color-text); color: var(--fs-text-primary);
font-size: 0.9rem; font-size: 0.9rem;
transition: border-color 0.12s, box-shadow 0.15s, transform 0.15s; transition: border-color 0.12s, box-shadow 0.15s, transform 0.15s;
box-shadow: 0 1px 3px rgba(0,0,0,0.04); box-shadow: 0 1px 3px rgba(0,0,0,0.04);
} }
.note-row:hover { .note-row:hover {
border-color: color-mix(in srgb, var(--color-primary) 50%, var(--color-border)); border-color: color-mix(in srgb, var(--fs-accent) 50%, var(--fs-border-color));
box-shadow: 0 3px 10px rgba(0,0,0,0.07); box-shadow: 0 3px 10px rgba(0,0,0,0.07);
transform: translateY(-1px); transform: translateY(-1px);
} }
.note-icon { color: var(--color-text-muted); flex-shrink: 0; } .note-icon { color: var(--fs-text-tertiary); flex-shrink: 0; }
.note-title { font-weight: 500; min-width: 0; flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .note-title { font-weight: 500; min-width: 0; flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.note-date { font-size: 0.75rem; color: var(--color-text-muted); flex-shrink: 0; } .note-date { font-size: 0.75rem; color: var(--fs-text-tertiary); flex-shrink: 0; }
.empty-msg { color: var(--color-text-muted); font-size: 0.875rem; text-align: center; padding: 1rem; } .empty-msg { color: var(--fs-text-tertiary); font-size: 0.875rem; text-align: center; padding: 1rem; }
/* Deliberately NOT styled like .empty-msg: "no tasks" and "the tasks did not /* Deliberately NOT styled like .empty-msg: "no tasks" and "the tasks did not
load" look identical to a user, and conflating them is what let a silent load" look identical to a user, and conflating them is what let a silent
failure read as an empty project. */ failure read as an empty project. */
.tasks-error { color: var(--color-danger); font-size: 0.875rem; padding: 1rem; text-align: center; } .tasks-error { color: var(--fs-error); font-size: 0.875rem; padding: 1rem; text-align: center; }
/* ── Modal ───────────────────────────────────────────────────── */ /* ── Modal ───────────────────────────────────────────────────── */
.modal-overlay { .modal-overlay {
position: fixed; inset: 0; position: fixed; inset: 0;
background: var(--color-overlay); background: var(--fs-overlay);
display: flex; align-items: center; justify-content: center; display: flex; align-items: center; justify-content: center;
z-index: 200; z-index: 200;
} }
.modal-card { .modal-card {
background: var(--color-bg-card); background: var(--fs-surface-raised);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-md); border-radius: var(--fs-radius-lg);
padding: 1.5rem; padding: 1.5rem;
width: 100%; width: 100%;
max-width: 400px; max-width: 400px;
box-shadow: 0 8px 32px var(--color-shadow); box-shadow: 0 8px 32px var(--color-shadow);
} }
.modal-title { margin: 0 0 0.75rem; font-size: 1.05rem; } .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-actions { display: flex; justify-content: flex-end; gap: 0.5rem; }
.modal-btn { .modal-btn {
padding: 0.4rem 0.9rem; padding: 0.4rem 0.9rem;
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
background: var(--color-bg-secondary); background: var(--fs-surface-raised);
color: var(--color-text); color: var(--fs-text-primary);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
cursor: pointer; cursor: pointer;
font-size: 0.875rem; font-size: 0.875rem;
font-family: inherit; font-family: inherit;
} }
.modal-btn:hover { background: var(--color-bg); } .modal-btn:hover { background: var(--fs-surface-page); }
.modal-btn-danger { background: var(--color-action-destructive); border-color: var(--color-action-destructive); color: var(--fs-text-on-action); } .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(--color-action-destructive-hover); border-color: var(--color-action-destructive-hover); } .modal-btn-danger:hover { background: var(--fs-action-destructive-hover); border-color: var(--fs-action-destructive-hover); }
/* ── Skeleton ────────────────────────────────────────────────── */ /* ── Skeleton ────────────────────────────────────────────────── */
@keyframes skel-shine { to { background-position: 200% center; } } @keyframes skel-shine { to { background-position: 200% center; } }
@@ -1512,21 +1512,21 @@ async function confirmDelete() {
gap: 0.65rem; gap: 0.65rem;
} }
.skel-title, .skel-goal, .skel-stats, .skel-body, .skel-row { .skel-title, .skel-goal, .skel-stats, .skel-body, .skel-row {
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
background: linear-gradient( background: linear-gradient(
90deg, 90deg,
var(--color-bg-secondary) 25%, var(--fs-surface-raised) 25%,
color-mix(in srgb, var(--color-text-muted) 16%, var(--color-bg-secondary)) 50%, color-mix(in srgb, var(--fs-text-tertiary) 16%, var(--fs-surface-raised)) 50%,
var(--color-bg-secondary) 75% var(--fs-surface-raised) 75%
); );
background-size: 200% 100%; background-size: 200% 100%;
animation: skel-shine 1.5s ease infinite; animation: skel-shine 1.5s ease infinite;
} }
.skel-title { height: 2.2rem; width: 55%; border-radius: var(--radius-md); } .skel-title { height: 2.2rem; width: 55%; border-radius: var(--fs-radius-lg); }
.skel-goal { height: 1rem; width: 75%; } .skel-goal { height: 1rem; width: 75%; }
.skel-stats { height: 2rem; width: 50%; border-radius: var(--radius-md); } .skel-stats { height: 2rem; width: 50%; border-radius: var(--fs-radius-lg); }
.skel-body { height: 200px; border-radius: var(--radius-md); } .skel-body { height: 200px; border-radius: var(--fs-radius-lg); }
.skel-row { height: 2.5rem; border-radius: var(--radius-sm); } .skel-row { height: 2.5rem; border-radius: var(--fs-radius-sm); }
.skel-row--short { width: 65%; } .skel-row--short { width: 65%; }
/* ── Responsive ──────────────────────────────────────────────── */ /* ── Responsive ──────────────────────────────────────────────── */
+17 -17
View File
@@ -168,9 +168,9 @@ async function handleSubmit() {
.auth-card { .auth-card {
width: 100%; width: 100%;
max-width: 400px; max-width: 400px;
background: var(--color-bg-card); background: var(--fs-surface-raised);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-md); border-radius: var(--fs-radius-lg);
padding: 2rem; padding: 2rem;
} }
.auth-brand { .auth-brand {
@@ -186,13 +186,13 @@ async function handleSubmit() {
} }
.loading-msg { .loading-msg {
text-align: center; text-align: center;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
font-size: 0.95rem; font-size: 0.95rem;
padding: 1rem 0; padding: 1rem 0;
} }
.error-block { .error-block {
text-align: center; text-align: center;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
font-size: 0.95rem; font-size: 0.95rem;
padding: 0.5rem 0; padding: 0.5rem 0;
} }
@@ -211,11 +211,11 @@ async function handleSubmit() {
.input { .input {
width: 100%; width: 100%;
padding: 0.5rem 0.75rem; padding: 0.5rem 0.75rem;
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
font-size: 0.95rem; font-size: 0.95rem;
background: var(--color-bg); background: var(--fs-surface-page);
color: var(--color-text); color: var(--fs-text-primary);
box-sizing: border-box; box-sizing: border-box;
} }
.input:disabled { .input:disabled {
@@ -224,36 +224,36 @@ async function handleSubmit() {
} }
.input:focus { .input:focus {
outline: none; outline: none;
border-color: var(--color-primary); border-color: var(--fs-accent);
} }
.input-error { .input-error {
border-color: var(--color-danger); border-color: var(--fs-error);
} }
.input-error:focus { .input-error:focus {
border-color: var(--color-danger); border-color: var(--fs-error);
} }
.field-hint { .field-hint {
margin: 0.35rem 0 0; margin: 0.35rem 0 0;
font-size: 0.8rem; font-size: 0.8rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
} }
.error-hint { .error-hint {
margin: 0.35rem 0 0; margin: 0.35rem 0 0;
font-size: 0.8rem; font-size: 0.8rem;
color: var(--color-danger); color: var(--fs-error);
} }
.error-msg { .error-msg {
color: var(--color-danger); color: var(--fs-error);
font-size: 0.9rem; font-size: 0.9rem;
margin: 0 0 0.75rem; margin: 0 0 0.75rem;
} }
.auth-footer { .auth-footer {
text-align: center; text-align: center;
font-size: 0.9rem; font-size: 0.9rem;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
margin: 1rem 0 0; margin: 1rem 0 0;
} }
.auth-footer a { .auth-footer a {
color: var(--color-primary); color: var(--fs-accent);
} }
</style> </style>
+17 -17
View File
@@ -141,9 +141,9 @@ async function handleSubmit() {
.auth-card { .auth-card {
width: 100%; width: 100%;
max-width: 400px; max-width: 400px;
background: var(--color-bg-card); background: var(--fs-surface-raised);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-md); border-radius: var(--fs-radius-lg);
padding: 2rem; padding: 2rem;
} }
.auth-brand { .auth-brand {
@@ -159,13 +159,13 @@ async function handleSubmit() {
} }
.loading-msg { .loading-msg {
text-align: center; text-align: center;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
font-size: 0.9rem; font-size: 0.9rem;
padding: 1rem 0; padding: 1rem 0;
} }
.closed-msg { .closed-msg {
text-align: center; text-align: center;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
font-size: 0.95rem; font-size: 0.95rem;
padding: 0.5rem 0; padding: 0.5rem 0;
} }
@@ -184,45 +184,45 @@ async function handleSubmit() {
.input { .input {
width: 100%; width: 100%;
padding: 0.5rem 0.75rem; padding: 0.5rem 0.75rem;
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
font-size: 0.95rem; font-size: 0.95rem;
background: var(--color-bg); background: var(--fs-surface-page);
color: var(--color-text); color: var(--fs-text-primary);
box-sizing: border-box; box-sizing: border-box;
} }
.input:focus { .input:focus {
outline: none; outline: none;
border-color: var(--color-primary); border-color: var(--fs-accent);
} }
.input-error { .input-error {
border-color: var(--color-danger); border-color: var(--fs-error);
} }
.input-error:focus { .input-error:focus {
border-color: var(--color-danger); border-color: var(--fs-error);
} }
.field-hint { .field-hint {
margin: 0.35rem 0 0; margin: 0.35rem 0 0;
font-size: 0.8rem; font-size: 0.8rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
} }
.error-hint { .error-hint {
margin: 0.35rem 0 0; margin: 0.35rem 0 0;
font-size: 0.8rem; font-size: 0.8rem;
color: var(--color-danger); color: var(--fs-error);
} }
.error-msg { .error-msg {
color: var(--color-danger); color: var(--fs-error);
font-size: 0.9rem; font-size: 0.9rem;
margin: 0 0 0.75rem; margin: 0 0 0.75rem;
} }
.auth-footer { .auth-footer {
text-align: center; text-align: center;
font-size: 0.9rem; font-size: 0.9rem;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
margin: 1rem 0 0; margin: 1rem 0 0;
} }
.auth-footer a { .auth-footer a {
color: var(--color-primary); color: var(--fs-accent);
} }
</style> </style>
+17 -17
View File
@@ -117,9 +117,9 @@ async function handleSubmit() {
.auth-card { .auth-card {
width: 100%; width: 100%;
max-width: 400px; max-width: 400px;
background: var(--color-bg-card); background: var(--fs-surface-raised);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-md); border-radius: var(--fs-radius-lg);
padding: 2rem; padding: 2rem;
} }
.auth-brand { .auth-brand {
@@ -135,7 +135,7 @@ async function handleSubmit() {
} }
.error-block { .error-block {
text-align: center; text-align: center;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
font-size: 0.95rem; font-size: 0.95rem;
padding: 0.5rem 0; padding: 0.5rem 0;
} }
@@ -144,7 +144,7 @@ async function handleSubmit() {
} }
.success-msg { .success-msg {
text-align: center; text-align: center;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
font-size: 0.95rem; font-size: 0.95rem;
padding: 0.5rem 0; padding: 0.5rem 0;
} }
@@ -163,45 +163,45 @@ async function handleSubmit() {
.input { .input {
width: 100%; width: 100%;
padding: 0.5rem 0.75rem; padding: 0.5rem 0.75rem;
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
font-size: 0.95rem; font-size: 0.95rem;
background: var(--color-bg); background: var(--fs-surface-page);
color: var(--color-text); color: var(--fs-text-primary);
box-sizing: border-box; box-sizing: border-box;
} }
.input:focus { .input:focus {
outline: none; outline: none;
border-color: var(--color-primary); border-color: var(--fs-accent);
} }
.input-error { .input-error {
border-color: var(--color-danger); border-color: var(--fs-error);
} }
.input-error:focus { .input-error:focus {
border-color: var(--color-danger); border-color: var(--fs-error);
} }
.field-hint { .field-hint {
margin: 0.35rem 0 0; margin: 0.35rem 0 0;
font-size: 0.8rem; font-size: 0.8rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
} }
.error-hint { .error-hint {
margin: 0.35rem 0 0; margin: 0.35rem 0 0;
font-size: 0.8rem; font-size: 0.8rem;
color: var(--color-danger); color: var(--fs-error);
} }
.error-msg { .error-msg {
color: var(--color-danger); color: var(--fs-error);
font-size: 0.9rem; font-size: 0.9rem;
margin: 0 0 0.75rem; margin: 0 0 0.75rem;
} }
.auth-footer { .auth-footer {
text-align: center; text-align: center;
font-size: 0.9rem; font-size: 0.9rem;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
margin: 1rem 0 0; margin: 1rem 0 0;
} }
.auth-footer a { .auth-footer a {
color: var(--color-primary); color: var(--fs-accent);
} }
</style> </style>
+2 -2
View File
@@ -107,10 +107,10 @@ watch(() => route.query, syncFromRoute);
grid-template-columns: 280px 300px 1fr; grid-template-columns: 280px 300px 1fr;
height: 100vh; height: 100vh;
gap: 1px; gap: 1px;
background: var(--color-border); background: var(--fs-border-color);
} }
.pane.empty { .pane.empty {
background: var(--color-surface); background: var(--fs-surface-hover);
padding: 1rem; padding: 1rem;
opacity: 0.6; opacity: 0.6;
font-style: italic; font-style: italic;
+197 -197
View File
@@ -2353,7 +2353,7 @@ function formatUserDate(iso: string): string {
font-weight: 500; font-weight: 500;
text-transform: uppercase; text-transform: uppercase;
letter-spacing: 0.07em; letter-spacing: 0.07em;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
padding: 0.25rem 0.75rem 0.2rem; padding: 0.25rem 0.75rem 0.2rem;
} }
.sidebar-item { .sidebar-item {
@@ -2366,19 +2366,19 @@ function formatUserDate(iso: string): string {
background: none; background: none;
cursor: pointer; cursor: pointer;
font-size: 0.875rem; font-size: 0.875rem;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
border-radius: 0 var(--radius-sm) var(--radius-sm) 0; border-radius: 0 var(--fs-radius-sm) var(--fs-radius-sm) 0;
transition: color 0.15s, background 0.15s, border-color 0.15s; transition: color 0.15s, background 0.15s, border-color 0.15s;
font-family: inherit; font-family: inherit;
} }
.sidebar-item:hover { .sidebar-item:hover {
color: var(--color-text); color: var(--fs-text-primary);
background: var(--color-bg-secondary); background: var(--fs-surface-raised);
} }
.sidebar-item.active { .sidebar-item.active {
color: var(--color-primary); color: var(--fs-accent);
background: color-mix(in srgb, var(--color-primary) 8%, transparent); background: color-mix(in srgb, var(--fs-accent) 8%, transparent);
border-left-color: var(--color-primary); border-left-color: var(--fs-accent);
font-weight: 500; font-weight: 500;
} }
@@ -2396,9 +2396,9 @@ function formatUserDate(iso: string): string {
align-items: start; align-items: start;
} }
.settings-section { .settings-section {
background: var(--color-bg-card); background: var(--fs-surface-raised);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-md); border-radius: var(--fs-radius-lg);
padding: 1.25rem; padding: 1.25rem;
} }
.settings-section.full-width { .settings-section.full-width {
@@ -2410,12 +2410,12 @@ function formatUserDate(iso: string): string {
font-weight: 500; font-weight: 500;
text-transform: uppercase; text-transform: uppercase;
letter-spacing: 0.07em; letter-spacing: 0.07em;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
} }
.section-desc { .section-desc {
margin: 0 0 1rem; margin: 0 0 1rem;
font-size: 0.875rem; font-size: 0.875rem;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
line-height: 1.5; line-height: 1.5;
} }
@@ -2429,8 +2429,8 @@ function formatUserDate(iso: string): string {
.model-row { .model-row {
display: flex; align-items: center; justify-content: space-between; gap: 0.5rem; display: flex; align-items: center; justify-content: space-between; gap: 0.5rem;
padding: 0.45rem 0.6rem; padding: 0.45rem 0.6rem;
background: var(--color-bg-secondary); background: var(--fs-surface-raised);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: 6px; border-radius: 6px;
} }
.model-row-info { display: flex; align-items: center; gap: 0.4rem; min-width: 0; flex: 1; } .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; 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--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-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 { .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; font-size: 0.8rem; padding: 0.2rem 0.35rem; border-radius: 3px; line-height: 1;
transition: color 0.15s, background 0.15s; 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-delete-btn:disabled { opacity: 0.4; cursor: default; }
.model-pull-form { display: flex; gap: 0.5rem; margin-top: 0.5rem; } .model-pull-form { display: flex; gap: 0.5rem; margin-top: 0.5rem; }
.model-pull-form .input { flex: 1; } .model-pull-form .input { flex: 1; }
.model-suggestions { display: flex; align-items: center; gap: 0.35rem; flex-wrap: wrap; margin-top: 0.4rem; } .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 { .suggestion-chip {
font-size: 0.72rem; padding: 0.15rem 0.5rem; border-radius: 4px; font-size: 0.72rem; padding: 0.15rem 0.5rem; border-radius: 4px;
border: 1px solid var(--color-border); background: var(--color-bg-card); border: 1px solid var(--fs-border-color); background: var(--fs-surface-raised);
cursor: pointer; font-family: monospace; color: var(--color-text); cursor: pointer; font-family: monospace; color: var(--fs-text-primary);
transition: border-color 0.12s, background 0.12s; 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; } .suggestion-chip:disabled { opacity: 0.4; cursor: default; }
.model-pull-progress { margin-top: 0.6rem; } .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 { .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 { .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; transition: width 0.3s ease;
} }
.pull-bar-indeterminate { .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; position: relative; overflow: hidden;
} }
.pull-bar-indeterminate::after { .pull-bar-indeterminate::after {
content: ""; position: absolute; top: 0; left: -40%; 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; animation: indeterminate 1.2s ease-in-out infinite;
} }
@keyframes indeterminate { @keyframes indeterminate {
@@ -2503,27 +2503,27 @@ function formatUserDate(iso: string): string {
font-size: 0.875rem; font-size: 0.875rem;
font-weight: 500; font-weight: 500;
margin-bottom: 0.35rem; margin-bottom: 0.35rem;
color: var(--color-text); color: var(--fs-text-primary);
} }
.input { .input {
width: 100%; width: 100%;
padding: 0.45rem 0.7rem; padding: 0.45rem 0.7rem;
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
font-size: 0.9rem; font-size: 0.9rem;
background: var(--color-bg); background: var(--fs-surface-page);
color: var(--color-text); color: var(--fs-text-primary);
box-sizing: border-box; box-sizing: border-box;
font-family: inherit; font-family: inherit;
} }
.input:focus { .input:focus {
outline: none; outline: none;
border-color: var(--color-primary); border-color: var(--fs-accent);
} }
.field-hint { .field-hint {
margin: 0.3rem 0 0; margin: 0.3rem 0 0;
font-size: 0.78rem; font-size: 0.78rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
} }
.field-hint-warn { .field-hint-warn {
display: block; display: block;
@@ -2552,12 +2552,12 @@ function formatUserDate(iso: string): string {
font-size: 0.82rem; font-size: 0.82rem;
padding: 0.2rem 0; padding: 0.2rem 0;
} }
.db-maint-table-list .dm-status { color: var(--color-text-muted); } .db-maint-table-list .dm-status { color: var(--fs-text-tertiary); }
.db-maint-table-list li.dm-failed .dm-status { color: var(--color-danger); } .db-maint-table-list li.dm-failed .dm-status { color: var(--fs-error); }
/* DB table-health readout */ /* DB table-health readout */
.db-health { margin-top: 1.5rem; } .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-scroll { overflow-x: auto; margin-top: 0.5rem; }
.db-health-table { .db-health-table {
width: 100%; width: 100%;
@@ -2567,35 +2567,35 @@ function formatUserDate(iso: string): string {
.db-health-table th, .db-health-table td { .db-health-table th, .db-health-table td {
text-align: left; text-align: left;
padding: 0.35rem 0.6rem; padding: 0.35rem 0.6rem;
border-bottom: 1px solid var(--color-border); border-bottom: 1px solid var(--fs-border-color);
white-space: nowrap; white-space: nowrap;
} }
.db-health-table th { .db-health-table th {
font-size: 0.72rem; font-size: 0.72rem;
text-transform: uppercase; text-transform: uppercase;
letter-spacing: 0.04em; letter-spacing: 0.04em;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
font-weight: 500; font-weight: 500;
} }
.db-health-table td.num, .db-health-table th.num { text-align: right; font-variant-numeric: tabular-nums; } .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 { color: var(--fs-warning); }
.db-health-table tr.dh-warn td:first-child code { color: var(--color-warning); } .db-health-table tr.dh-warn td:first-child code { color: var(--fs-warning); }
.btn-warn:hover:not(:disabled) { .btn-warn:hover:not(:disabled) {
background: var(--color-warning); background: var(--fs-warning);
color: var(--fs-text-on-action); color: var(--fs-text-on-action);
} }
.saved-msg { .saved-msg {
color: var(--color-success); color: var(--fs-success);
font-size: 0.875rem; font-size: 0.875rem;
font-weight: 500; font-weight: 500;
} }
.input-error { border-color: var(--color-danger); } .input-error { border-color: var(--fs-error); }
.input-error:focus { border-color: var(--color-danger); } .input-error:focus { border-color: var(--fs-error); }
.error-hint { .error-hint {
margin: 0.3rem 0 0; margin: 0.3rem 0 0;
font-size: 0.78rem; font-size: 0.78rem;
color: var(--color-danger); color: var(--fs-error);
} }
.retention-row { .retention-row {
@@ -2623,21 +2623,21 @@ function formatUserDate(iso: string): string {
align-items: center; align-items: center;
gap: 0.5rem; gap: 0.5rem;
font-size: 0.9rem; font-size: 0.9rem;
color: var(--color-text); color: var(--fs-text-primary);
cursor: pointer; cursor: pointer;
} }
.checkbox-field input[type="checkbox"] { .checkbox-field input[type="checkbox"] {
width: 16px; width: 16px;
height: 16px; height: 16px;
accent-color: var(--color-primary); accent-color: var(--fs-accent);
} }
/* Search test */ /* Search test */
.url-chip { .url-chip {
font-size: 0.8rem; font-size: 0.8rem;
padding: 0.1rem 0.4rem; padding: 0.1rem 0.4rem;
background: var(--color-bg-secondary); background: var(--fs-surface-raised);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: 4px; border-radius: 4px;
} }
.not-configured { .not-configured {
@@ -2652,7 +2652,7 @@ function formatUserDate(iso: string): string {
.search-row .input { flex: 1; } .search-row .input { flex: 1; }
.search-error { .search-error {
font-size: 0.875rem; font-size: 0.875rem;
color: var(--color-danger); color: var(--fs-error);
margin: 0 0 0.5rem; margin: 0 0 0.5rem;
} }
.search-results { .search-results {
@@ -2665,9 +2665,9 @@ function formatUserDate(iso: string): string {
} }
.search-result { .search-result {
padding: 0.65rem 0.85rem; padding: 0.65rem 0.85rem;
background: var(--color-bg-secondary); background: var(--fs-surface-raised);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
} }
.result-header { .result-header {
display: flex; display: flex;
@@ -2679,20 +2679,20 @@ function formatUserDate(iso: string): string {
.result-title { .result-title {
font-size: 0.9rem; font-size: 0.9rem;
font-weight: 500; font-weight: 500;
color: var(--color-primary); color: var(--fs-accent);
text-decoration: none; text-decoration: none;
word-break: break-word; word-break: break-word;
} }
.result-title:hover { text-decoration: underline; } .result-title:hover { text-decoration: underline; }
.result-host { .result-host {
font-size: 0.75rem; font-size: 0.75rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
white-space: nowrap; white-space: nowrap;
} }
.result-snippet { .result-snippet {
margin: 0; margin: 0;
font-size: 0.82rem; font-size: 0.82rem;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
line-height: 1.45; line-height: 1.45;
display: -webkit-box; display: -webkit-box;
-webkit-line-clamp: 2; -webkit-line-clamp: 2;
@@ -2721,10 +2721,10 @@ function formatUserDate(iso: string): string {
margin: 0 0 0.5rem; margin: 0 0 0.5rem;
font-size: 0.875rem; font-size: 0.875rem;
font-weight: 500; font-weight: 500;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
} }
.test-email-section { .test-email-section {
border-top: 1px solid var(--color-border); border-top: 1px solid var(--fs-border-color);
padding-top: 1rem; padding-top: 1rem;
} }
.test-email-row { .test-email-row {
@@ -2737,7 +2737,7 @@ function formatUserDate(iso: string): string {
/* Push notifications */ /* Push notifications */
.push-unsupported { .push-unsupported {
font-size: 0.875rem; font-size: 0.875rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
} }
.push-status-row { .push-status-row {
display: flex; display: flex;
@@ -2747,7 +2747,7 @@ function formatUserDate(iso: string): string {
font-size: 0.875rem; font-size: 0.875rem;
} }
.push-status-label { .push-status-label {
color: var(--color-text-secondary); color: var(--fs-text-secondary);
font-weight: 500; font-weight: 500;
} }
.push-permission-badge, .push-permission-badge,
@@ -2758,15 +2758,15 @@ function formatUserDate(iso: string): string {
letter-spacing: 0.04em; letter-spacing: 0.04em;
padding: 0.1rem 0.4rem; padding: 0.1rem 0.4rem;
border-radius: 999px; border-radius: 999px;
background: color-mix(in srgb, var(--color-text-muted) 15%, transparent); background: color-mix(in srgb, var(--fs-text-tertiary) 15%, transparent);
color: var(--color-text-muted); color: var(--fs-text-tertiary);
} }
.perm-granted { 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(--color-danger) 15%, transparent); color: var(--color-danger); } .perm-denied { background: color-mix(in srgb, var(--fs-error) 15%, transparent); color: var(--fs-error); }
.sub-active { background: color-mix(in srgb, var(--color-success) 15%, transparent); color: var(--color-success); } .sub-active { background: color-mix(in srgb, var(--fs-success) 15%, transparent); color: var(--fs-success); }
.push-error { .push-error {
font-size: 0.82rem; font-size: 0.82rem;
color: var(--color-danger); color: var(--fs-error);
margin: 0.25rem 0 0; margin: 0.25rem 0 0;
} }
@@ -2780,7 +2780,7 @@ function formatUserDate(iso: string): string {
position: static; position: static;
padding-right: 0; padding-right: 0;
padding-bottom: 0.5rem; padding-bottom: 0.5rem;
border-bottom: 1px solid var(--color-border); border-bottom: 1px solid var(--fs-border-color);
margin-bottom: 1rem; margin-bottom: 1rem;
} }
.sidebar-group { .sidebar-group {
@@ -2796,13 +2796,13 @@ function formatUserDate(iso: string): string {
width: auto; width: auto;
border-left: none; border-left: none;
border-bottom: 2px solid transparent; 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; font-size: 0.82rem;
padding: 0.35rem 0.7rem; padding: 0.35rem 0.7rem;
} }
.sidebar-item.active { .sidebar-item.active {
border-bottom-color: var(--color-primary); border-bottom-color: var(--fs-accent);
background: var(--color-primary-tint); background: var(--fs-accent-soft);
} }
.settings-grid { .settings-grid {
grid-template-columns: 1fr; grid-template-columns: 1fr;
@@ -2827,8 +2827,8 @@ function formatUserDate(iso: string): string {
} }
.registration-info { flex: 1; } .registration-info { flex: 1; }
.registration-status { margin: 0; font-size: 0.95rem; } .registration-status { margin: 0; font-size: 0.95rem; }
.text-success { color: var(--color-success); } .text-success { color: var(--fs-success); }
.text-muted { color: var(--color-text-muted); } .text-muted { color: var(--fs-text-tertiary); }
.invite-form { .invite-form {
display: flex; display: flex;
gap: 0.5rem; gap: 0.5rem;
@@ -2840,7 +2840,7 @@ function formatUserDate(iso: string): string {
margin: 0 0 0.5rem; margin: 0 0 0.5rem;
font-size: 0.85rem; font-size: 0.85rem;
font-weight: 500; font-weight: 500;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
} }
.users-table { width: 100%; border-collapse: collapse; } .users-table { width: 100%; border-collapse: collapse; }
.users-table th { .users-table th {
@@ -2849,19 +2849,19 @@ function formatUserDate(iso: string): string {
font-weight: 500; font-weight: 500;
text-transform: uppercase; text-transform: uppercase;
letter-spacing: 0.05em; letter-spacing: 0.05em;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
padding: 0.5rem 0.75rem; padding: 0.5rem 0.75rem;
border-bottom: 1px solid var(--color-border); border-bottom: 1px solid var(--fs-border-color);
} }
.users-table td { .users-table td {
padding: 0.65rem 0.75rem; padding: 0.65rem 0.75rem;
border-bottom: 1px solid var(--color-border); border-bottom: 1px solid var(--fs-border-color);
font-size: 0.9rem; font-size: 0.9rem;
} }
.users-table tbody tr:last-child td { border-bottom: none; } .users-table tbody tr:last-child td { border-bottom: none; }
.cell-username { font-weight: 500; } .cell-username { font-weight: 500; }
.cell-email { color: var(--color-text-secondary); } .cell-email { color: var(--fs-text-secondary); }
.cell-date { color: var(--color-text-muted); font-size: 0.85rem; } .cell-date { color: var(--fs-text-tertiary); font-size: 0.85rem; }
.cell-actions { white-space: nowrap; } .cell-actions { white-space: nowrap; }
.role-badge { .role-badge {
display: inline-block; display: inline-block;
@@ -2870,17 +2870,17 @@ function formatUserDate(iso: string): string {
text-transform: uppercase; text-transform: uppercase;
letter-spacing: 0.05em; letter-spacing: 0.05em;
padding: 0.15rem 0.4rem; padding: 0.15rem 0.4rem;
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
} }
.role-admin { .role-admin {
color: var(--color-primary); color: var(--fs-accent);
background: color-mix(in srgb, var(--color-primary) 15%, transparent); background: color-mix(in srgb, var(--fs-accent) 15%, transparent);
} }
.role-user { .role-user {
color: var(--color-text-muted); color: var(--fs-text-tertiary);
background: var(--color-bg-secondary); 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 */ /* Per-row delete (users / invitations / etc.): ghost → Oxblood on hover */
/* Logs panel */ /* Logs panel */
@@ -2894,17 +2894,17 @@ function formatUserDate(iso: string): string {
align-items: center; align-items: center;
gap: 0.15rem; 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 { .stat-label {
font-size: 0.75rem; font-size: 0.75rem;
font-weight: 500; font-weight: 500;
text-transform: uppercase; text-transform: uppercase;
letter-spacing: 0.05em; letter-spacing: 0.05em;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
} }
.stat-audit { color: var(--color-primary); } .stat-audit { color: var(--fs-accent); }
.stat-usage { color: var(--color-success); } .stat-usage { color: var(--fs-success); }
.stat-error { color: var(--color-danger); } .stat-error { color: var(--fs-error); }
.filter-bar { display: flex; gap: 0.5rem; flex-wrap: wrap; margin-bottom: 0.75rem; } .filter-bar { display: flex; gap: 0.5rem; flex-wrap: wrap; margin-bottom: 0.75rem; }
.filter-select { min-width: 140px; } .filter-select { min-width: 140px; }
@@ -2918,49 +2918,49 @@ function formatUserDate(iso: string): string {
font-weight: 500; font-weight: 500;
text-transform: uppercase; text-transform: uppercase;
letter-spacing: 0.05em; letter-spacing: 0.05em;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
padding: 0.5rem 0.75rem; padding: 0.5rem 0.75rem;
border-bottom: 1px solid var(--color-border); border-bottom: 1px solid var(--fs-border-color);
} }
.logs-table td { .logs-table td {
padding: 0.5rem 0.75rem; padding: 0.5rem 0.75rem;
border-bottom: 1px solid var(--color-border); border-bottom: 1px solid var(--fs-border-color);
font-size: 0.85rem; font-size: 0.85rem;
} }
.logs-table tbody tr:last-child td { border-bottom: none; } .logs-table tbody tr:last-child td { border-bottom: none; }
.log-row { cursor: pointer; transition: background 0.1s; } .log-row { cursor: pointer; transition: background 0.1s; }
.log-row:hover { background: var(--color-bg-secondary); } .log-row:hover { background: var(--fs-surface-raised); }
.row-expanded { background: var(--color-bg-secondary); } .row-expanded { background: var(--fs-surface-raised); }
.cell-time { white-space: nowrap; color: var(--color-text-muted); font-size: 0.8rem; } .cell-time { white-space: nowrap; color: var(--fs-text-tertiary); font-size: 0.8rem; }
.cell-user { color: var(--color-text-secondary); } .cell-user { color: var(--fs-text-secondary); }
.cell-action { max-width: 260px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .cell-action { max-width: 260px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cell-status { font-family: monospace; font-size: 0.85rem; } .cell-status { font-family: monospace; font-size: 0.85rem; }
.cell-duration { color: var(--color-text-muted); font-size: 0.8rem; white-space: nowrap; } .cell-duration { color: var(--fs-text-tertiary); font-size: 0.8rem; white-space: nowrap; }
.text-error { color: var(--color-danger); } .text-error { color: var(--fs-error); }
/* Bare by design, like LogsView's twin of this: a `<tr>` has nothing to style /* Bare by design, like LogsView's twin of this: a `<tr>` has nothing to style
that its cells don't carry (#2444). */ that its cells don't carry (#2444). */
.detail-row td { padding: 0 0.75rem 0.75rem; border-bottom: 1px solid var(--color-border); } .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(--color-text-muted); margin-bottom: 0.4rem; } .detail-ip { font-family: monospace; font-size: 0.8rem; color: var(--fs-text-tertiary); margin-bottom: 0.4rem; }
.detail-json { .detail-json {
margin: 0; padding: 0.75rem; margin: 0; padding: 0.75rem;
background: var(--color-bg); border: 1px solid var(--color-border); background: var(--fs-surface-page); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-sm); font-size: 0.8rem; border-radius: var(--fs-radius-sm); font-size: 0.8rem;
overflow-x: auto; white-space: pre-wrap; word-break: break-all; max-height: 300px; overflow-x: auto; white-space: pre-wrap; word-break: break-all; max-height: 300px;
} }
.category-badge { .category-badge {
display: inline-block; display: inline-block;
font-size: 0.65rem; font-weight: 500; font-size: 0.65rem; font-weight: 500;
text-transform: uppercase; letter-spacing: 0.05em; 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-audit { 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); } .cat-usage { 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); } .cat-error { color: var(--fs-error); background: color-mix(in srgb, var(--fs-error) 15%, transparent); }
.method-tag { .method-tag {
display: inline-block; display: inline-block;
font-size: 0.65rem; font-weight: 500; font-family: monospace; font-size: 0.65rem; font-weight: 500; font-family: monospace;
padding: 0.05rem 0.25rem; border-radius: 3px; 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; margin-right: 0.25rem;
} }
@@ -2968,7 +2968,7 @@ function formatUserDate(iso: string): string {
.version-line { .version-line {
margin: 0; margin: 0;
font-size: 0.9rem; font-size: 0.9rem;
color: var(--color-text); color: var(--fs-text-primary);
display: flex; display: flex;
align-items: center; align-items: center;
gap: 0.6rem; gap: 0.6rem;
@@ -2977,10 +2977,10 @@ function formatUserDate(iso: string): string {
font-family: ui-monospace, monospace; font-family: ui-monospace, monospace;
font-size: 0.8rem; font-size: 0.8rem;
padding: 0.15rem 0.5rem; padding: 0.15rem 0.5rem;
background: var(--color-bg-secondary); background: var(--fs-surface-raised);
border: 1px solid var(--color-primary); border: 1px solid var(--fs-accent);
border-radius: 4px; border-radius: 4px;
color: var(--color-primary); color: var(--fs-accent);
} }
/* ── Groups tab ──────────────────────────────────────────────── */ /* ── Groups tab ──────────────────────────────────────────────── */
@@ -2989,16 +2989,16 @@ function formatUserDate(iso: string): string {
.input-field { .input-field {
width: 100%; width: 100%;
padding: 0.4rem 0.6rem; padding: 0.4rem 0.6rem;
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
background: var(--color-surface); background: var(--fs-surface-hover);
color: var(--color-text); color: var(--fs-text-primary);
font-size: 0.875rem; font-size: 0.875rem;
font-family: inherit; font-family: inherit;
outline: none; outline: none;
transition: border-color 0.15s; transition: border-color 0.15s;
} }
.input-field:focus { border-color: var(--color-primary); } .input-field:focus { border-color: var(--fs-accent); }
.group-create-form { .group-create-form {
display: flex; display: flex;
@@ -3010,7 +3010,7 @@ function formatUserDate(iso: string): string {
.group-create-form .input-field { flex: 1; min-width: 160px; } .group-create-form .input-field { flex: 1; min-width: 160px; }
.loading-msg, .empty-msg { .loading-msg, .empty-msg {
color: var(--color-text-muted); color: var(--fs-text-tertiary);
font-size: 0.88rem; font-size: 0.88rem;
padding: 0.5rem 0; padding: 0.5rem 0;
} }
@@ -3022,8 +3022,8 @@ function formatUserDate(iso: string): string {
} }
.group-card { .group-card {
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-md); border-radius: var(--fs-radius-lg);
overflow: hidden; overflow: hidden;
} }
@@ -3032,7 +3032,7 @@ function formatUserDate(iso: string): string {
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
padding: 0.75rem 1rem; padding: 0.75rem 1rem;
background: var(--color-bg-secondary); background: var(--fs-surface-raised);
} }
.group-card-info { .group-card-info {
@@ -3046,16 +3046,16 @@ function formatUserDate(iso: string): string {
.group-name { .group-name {
font-weight: 500; font-weight: 500;
font-size: 0.9rem; font-size: 0.9rem;
color: var(--color-text); color: var(--fs-text-primary);
} }
.group-meta { .group-meta {
font-size: 0.78rem; font-size: 0.78rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
white-space: nowrap; white-space: nowrap;
} }
.group-desc { .group-desc {
font-size: 0.82rem; font-size: 0.82rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
white-space: nowrap; white-space: nowrap;
@@ -3078,8 +3078,8 @@ function formatUserDate(iso: string): string {
top: 100%; top: 100%;
left: 0; left: 0;
right: 0; right: 0;
background: var(--color-surface); background: var(--fs-surface-hover);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: 6px; border-radius: 6px;
margin-top: 2px; margin-top: 2px;
list-style: none; list-style: none;
@@ -3098,16 +3098,16 @@ function formatUserDate(iso: string): string {
cursor: pointer; cursor: pointer;
transition: background 0.1s; 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-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 { .role-select {
padding: 0.4rem 0.5rem; padding: 0.4rem 0.5rem;
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: 6px; border-radius: 6px;
background: var(--color-surface); background: var(--fs-surface-hover);
color: var(--color-text); color: var(--fs-text-primary);
font-size: 0.85rem; font-size: 0.85rem;
cursor: pointer; cursor: pointer;
font-family: inherit; font-family: inherit;
@@ -3128,10 +3128,10 @@ function formatUserDate(iso: string): string {
gap: 0.5rem; gap: 0.5rem;
padding: 0.4rem 0.5rem; padding: 0.4rem 0.5rem;
border-radius: 6px; 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 { .member-role-badge {
font-size: 0.7rem; font-size: 0.7rem;
@@ -3141,11 +3141,11 @@ function formatUserDate(iso: string): string {
padding: 0.15rem 0.4rem; padding: 0.15rem 0.4rem;
border-radius: 4px; border-radius: 4px;
} }
.role-owner { background: color-mix(in srgb, var(--color-warning) 15%, transparent); color: var(--color-warning); } .role-owner { background: color-mix(in srgb, var(--fs-warning) 15%, transparent); color: var(--fs-warning); }
.role-member { background: color-mix(in srgb, var(--color-muted) 15%, transparent); color: var(--color-muted); } .role-member { background: color-mix(in srgb, var(--fs-text-tertiary) 15%, transparent); color: var(--fs-text-tertiary); }
.members-empty { .members-empty {
color: var(--color-text-muted); color: var(--fs-text-tertiary);
font-size: 0.82rem; font-size: 0.82rem;
padding: 0.25rem 0.5rem; padding: 0.25rem 0.5rem;
} }
@@ -3160,23 +3160,23 @@ function formatUserDate(iso: string): string {
font-size: 0.78rem; font-size: 0.78rem;
margin: 0.2rem 0 0; margin: 0.2rem 0 0;
} }
.geo-ok { color: var(--color-success); } .geo-ok { color: var(--fs-success); }
.geo-error { color: var(--color-danger); } .geo-error { color: var(--fs-error); }
.geo-pending { color: var(--color-text-muted); } .geo-pending { color: var(--fs-text-tertiary); }
.unit-toggle { .unit-toggle {
display: flex; display: flex;
gap: 0; gap: 0;
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
overflow: hidden; overflow: hidden;
width: fit-content; width: fit-content;
margin-top: 0.25rem; margin-top: 0.25rem;
} }
.unit-btn { .unit-btn {
padding: 0.4rem 1rem; padding: 0.4rem 1rem;
background: var(--color-bg-card); background: var(--fs-surface-raised);
color: var(--color-text-muted); color: var(--fs-text-tertiary);
font-size: 0.85rem; font-size: 0.85rem;
cursor: pointer; cursor: pointer;
border: none; border: none;
@@ -3184,14 +3184,14 @@ function formatUserDate(iso: string): string {
transition: background 0.15s, color 0.15s; transition: background 0.15s, color 0.15s;
} }
.unit-btn:not(:last-child) { .unit-btn:not(:last-child) {
border-right: 1px solid var(--color-border); border-right: 1px solid var(--fs-border-color);
} }
.unit-btn.active { .unit-btn.active {
background: var(--color-action-primary); background: var(--fs-action-primary);
color: var(--fs-text-on-action); color: var(--fs-text-on-action);
} }
.unit-btn:hover:not(.active) { .unit-btn:hover:not(.active) {
color: var(--color-text); color: var(--fs-text-primary);
} }
.checkbox-label { .checkbox-label {
@@ -3216,7 +3216,7 @@ function formatUserDate(iso: string): string {
} }
.time-sep { .time-sep {
font-size: 1.1rem; font-size: 1.1rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
} }
.time-sep--quiet { font-size: 0.9rem; } .time-sep--quiet { font-size: 0.9rem; }
@@ -3239,9 +3239,9 @@ function formatUserDate(iso: string): string {
cursor: pointer; cursor: pointer;
} }
.api-key-reveal { .api-key-reveal {
background: color-mix(in srgb, var(--color-primary) 8%, var(--color-surface)); background: color-mix(in srgb, var(--fs-accent) 8%, var(--fs-surface-hover));
border: 1px solid color-mix(in srgb, var(--color-primary) 30%, transparent); border: 1px solid color-mix(in srgb, var(--fs-accent) 30%, transparent);
border-radius: var(--radius-md); border-radius: var(--fs-radius-lg);
padding: 1rem; padding: 1rem;
margin-bottom: 1.5rem; margin-bottom: 1.5rem;
} }
@@ -3253,9 +3253,9 @@ function formatUserDate(iso: string): string {
} }
.api-key-value { .api-key-value {
flex: 1; flex: 1;
background: var(--color-surface-2); background: var(--fs-surface-hover);
padding: 0.4rem 0.6rem; padding: 0.4rem 0.6rem;
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
font-size: 0.85rem; font-size: 0.85rem;
word-break: break-all; word-break: break-all;
} }
@@ -3267,7 +3267,7 @@ function formatUserDate(iso: string): string {
.api-keys-table th, .api-keys-table td { .api-keys-table th, .api-keys-table td {
text-align: left; text-align: left;
padding: 0.5rem 0.75rem; padding: 0.5rem 0.75rem;
border-bottom: 1px solid var(--color-border); border-bottom: 1px solid var(--fs-border-color);
font-size: 0.9rem; font-size: 0.9rem;
} }
.api-keys-table th { font-weight: 500; opacity: 0.7; } .api-keys-table th { font-weight: 500; opacity: 0.7; }
@@ -3292,8 +3292,8 @@ function formatUserDate(iso: string): string {
align-items: center; align-items: center;
gap: 1rem; gap: 1rem;
padding: 0.65rem 0.9rem; padding: 0.65rem 0.9rem;
background: color-mix(in srgb, var(--color-primary) 8%, transparent); background: color-mix(in srgb, var(--fs-accent) 8%, transparent);
border: 1px solid color-mix(in srgb, var(--color-primary) 25%, transparent); border: 1px solid color-mix(in srgb, var(--fs-accent) 25%, transparent);
border-radius: 8px; border-radius: 8px;
} }
.mcp-pkg-name { font-family: monospace; font-size: 0.9rem; flex: 1; } .mcp-pkg-name { font-family: monospace; font-size: 0.9rem; flex: 1; }
@@ -3303,8 +3303,8 @@ function formatUserDate(iso: string): string {
.mcp-code { .mcp-code {
margin-top: 0.4rem; margin-top: 0.4rem;
padding: 0.55rem 0.75rem; padding: 0.55rem 0.75rem;
background: color-mix(in srgb, var(--color-text) 6%, transparent); background: color-mix(in srgb, var(--fs-text-primary) 6%, transparent);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: 6px; border-radius: 6px;
font-size: 0.82rem; font-size: 0.82rem;
font-family: monospace; font-family: monospace;
@@ -3317,23 +3317,23 @@ function formatUserDate(iso: string): string {
display: flex; display: flex;
gap: 0.25rem; gap: 0.25rem;
margin-bottom: 1rem; margin-bottom: 1rem;
border-bottom: 1px solid var(--color-border); border-bottom: 1px solid var(--fs-border-color);
} }
.mcp-client-tab { .mcp-client-tab {
background: transparent; background: transparent;
border: none; border: none;
padding: 0.5rem 0.9rem; padding: 0.5rem 0.9rem;
font-size: 0.85rem; font-size: 0.85rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
cursor: pointer; cursor: pointer;
border-bottom: 2px solid transparent; border-bottom: 2px solid transparent;
margin-bottom: -1px; margin-bottom: -1px;
transition: color 0.15s, border-color 0.15s; 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 { .mcp-client-tab.active {
color: var(--color-primary); color: var(--fs-accent);
border-bottom-color: var(--color-primary); border-bottom-color: var(--fs-accent);
font-weight: 500; font-weight: 500;
} }
.mcp-url-block { margin-top: 0.25rem; } .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-code-row .btn-sm { white-space: nowrap; }
.mcp-advanced { .mcp-advanced {
margin-top: 1.25rem; margin-top: 1.25rem;
border-top: 1px solid var(--color-border); border-top: 1px solid var(--fs-border-color);
padding-top: 0.75rem; padding-top: 0.75rem;
} }
.mcp-advanced summary { .mcp-advanced summary {
@@ -3428,7 +3428,7 @@ function formatUserDate(iso: string): string {
list-style: none; list-style: none;
margin: 0; margin: 0;
padding: 0; padding: 0;
border-top: 1px solid var(--color-border); border-top: 1px solid var(--fs-border-color);
max-height: 480px; max-height: 480px;
overflow-y: auto; overflow-y: auto;
} }
@@ -3438,19 +3438,19 @@ function formatUserDate(iso: string): string {
justify-content: space-between; justify-content: space-between;
gap: 1rem; gap: 1rem;
padding: 0.65rem 0.25rem; padding: 0.65rem 0.25rem;
border-bottom: 1px solid var(--color-border); border-bottom: 1px solid var(--fs-border-color);
} }
.voice-library-meta { .voice-library-meta {
min-width: 0; min-width: 0;
flex: 1; flex: 1;
} }
.voice-library-id { .voice-library-id {
font-family: var(--font-mono); font-family: var(--fs-font-mono);
font-size: 0.9rem; font-size: 0.9rem;
font-weight: 500; font-weight: 500;
} }
.voice-library-sub { .voice-library-sub {
color: var(--color-text-muted); color: var(--fs-text-tertiary);
font-size: 0.8rem; font-size: 0.8rem;
margin-top: 0.15rem; margin-top: 0.15rem;
} }
@@ -3462,7 +3462,7 @@ function formatUserDate(iso: string): string {
} }
.voice-library-empty { .voice-library-empty {
padding: 1rem 0; padding: 1rem 0;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
text-align: center; text-align: center;
font-style: italic; font-style: italic;
} }
@@ -3475,9 +3475,9 @@ function formatUserDate(iso: string): string {
letter-spacing: 0.04em; letter-spacing: 0.04em;
} }
.voice-badge--bundled { .voice-badge--bundled {
background: color-mix(in srgb, var(--color-text-muted) 10%, transparent); background: color-mix(in srgb, var(--fs-text-tertiary) 10%, transparent);
color: var(--color-text-muted); color: var(--fs-text-tertiary);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
} }
.status-badge { .status-badge {
font-size: 0.75rem; font-size: 0.75rem;
@@ -3486,14 +3486,14 @@ function formatUserDate(iso: string): string {
border-radius: 999px; border-radius: 999px;
} }
.status-on { .status-on {
background: color-mix(in srgb, var(--color-success) 15%, transparent); background: color-mix(in srgb, var(--fs-success) 15%, transparent);
color: var(--color-success); color: var(--fs-success);
border: 1px solid color-mix(in srgb, var(--color-success) 40%, transparent); border: 1px solid color-mix(in srgb, var(--fs-success) 40%, transparent);
} }
.status-off { .status-off {
background: color-mix(in srgb, var(--color-text-muted) 10%, transparent); background: color-mix(in srgb, var(--fs-text-tertiary) 10%, transparent);
color: var(--color-text-muted); color: var(--fs-text-tertiary);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
} }
.radio-group { .radio-group {
display: flex; display: flex;
@@ -3513,7 +3513,7 @@ function formatUserDate(iso: string): string {
.range-input { .range-input {
width: 100%; width: 100%;
max-width: 360px; max-width: 360px;
accent-color: var(--color-primary); accent-color: var(--fs-accent);
margin: 0.35rem 0 0.2rem; margin: 0.35rem 0 0.2rem;
} }
.range-labels { .range-labels {
@@ -3521,7 +3521,7 @@ function formatUserDate(iso: string): string {
justify-content: space-between; justify-content: space-between;
max-width: 360px; max-width: 360px;
font-size: 0.75rem; font-size: 0.75rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
} }
.form-actions { .form-actions {
margin-top: 1rem; margin-top: 1rem;
@@ -3539,7 +3539,7 @@ function formatUserDate(iso: string): string {
width: 4px; width: 4px;
height: 4px; height: 4px;
border-radius: 50%; border-radius: 50%;
background: var(--color-text-muted); background: var(--fs-text-tertiary);
animation: va-dot-bounce 1.2s ease-in-out infinite; animation: va-dot-bounce 1.2s ease-in-out infinite;
} }
.voice-admin-spinner span:nth-child(2) { animation-delay: 0.2s; } .voice-admin-spinner span:nth-child(2) { animation-delay: 0.2s; }
@@ -3553,9 +3553,9 @@ function formatUserDate(iso: string): string {
margin-bottom: 0.5rem; margin-bottom: 0.5rem;
} }
.blend-slot { .blend-slot {
background: color-mix(in srgb, var(--color-surface) 60%, transparent); background: color-mix(in srgb, var(--fs-surface-hover) 60%, transparent);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-md); border-radius: var(--fs-radius-lg);
padding: 0.75rem 1rem; padding: 0.75rem 1rem;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
@@ -3577,7 +3577,7 @@ function formatUserDate(iso: string): string {
font-variant-numeric: tabular-nums; font-variant-numeric: tabular-nums;
min-width: 2.5rem; min-width: 2.5rem;
text-align: right; text-align: right;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
} }
.blend-actions { .blend-actions {
margin-top: 0.25rem; margin-top: 0.25rem;
@@ -3599,37 +3599,37 @@ function formatUserDate(iso: string): string {
} }
.day-btn { .day-btn {
padding: 0.3rem 0.65rem; padding: 0.3rem 0.65rem;
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: 6px; border-radius: 6px;
background: var(--color-bg-card); background: var(--fs-surface-raised);
color: var(--color-text-muted); color: var(--fs-text-tertiary);
font-size: 0.82rem; font-size: 0.82rem;
cursor: pointer; cursor: pointer;
transition: all 0.15s; transition: all 0.15s;
font-family: inherit; 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 { .day-btn.active {
background: color-mix(in srgb, var(--color-primary) 15%, transparent); background: color-mix(in srgb, var(--fs-accent) 15%, transparent);
border-color: var(--color-primary); border-color: var(--fs-accent);
color: var(--color-primary); color: var(--fs-accent);
font-weight: 500; font-weight: 500;
} }
.learned-summary { .learned-summary {
background: var(--color-bg-secondary); background: var(--fs-surface-raised);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-left: 3px solid var(--color-primary); border-left: 3px solid var(--fs-accent);
border-radius: 8px; border-radius: 8px;
padding: 0.85rem 1rem; padding: 0.85rem 1rem;
font-size: 0.9rem; font-size: 0.9rem;
line-height: 1.55; line-height: 1.55;
color: var(--color-text); color: var(--fs-text-primary);
white-space: pre-wrap; white-space: pre-wrap;
margin-bottom: 0.75rem; margin-bottom: 0.75rem;
} }
.learned-empty { .learned-empty {
font-size: 0.85rem; font-size: 0.85rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
margin-bottom: 0.75rem; margin-bottom: 0.75rem;
} }
</style> </style>
+20 -20
View File
@@ -106,11 +106,11 @@ onMounted(async () => {
font-size: 1.8rem; font-size: 1.8rem;
font-weight: 700; font-weight: 700;
margin: 0; margin: 0;
color: var(--color-text); color: var(--fs-text-primary);
} }
.loading-state { .loading-state {
color: var(--color-muted); color: var(--fs-text-tertiary);
padding: 2rem; padding: 2rem;
text-align: center; text-align: center;
} }
@@ -124,7 +124,7 @@ onMounted(async () => {
font-weight: 700; font-weight: 700;
text-transform: uppercase; text-transform: uppercase;
letter-spacing: 0.07em; letter-spacing: 0.07em;
color: var(--color-muted); color: var(--fs-text-tertiary);
margin: 0 0 0.75rem; margin: 0 0 0.75rem;
} }
@@ -136,9 +136,9 @@ onMounted(async () => {
.shared-card { .shared-card {
display: flex; display: flex;
background: var(--color-surface); background: var(--fs-surface-hover);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-lg); border-radius: var(--fs-radius-xl);
overflow: hidden; overflow: hidden;
text-decoration: none; text-decoration: none;
transition: box-shadow 0.15s, transform 0.15s; transition: box-shadow 0.15s, transform 0.15s;
@@ -151,7 +151,7 @@ onMounted(async () => {
.card-color-bar { .card-color-bar {
width: 4px; width: 4px;
flex-shrink: 0; flex-shrink: 0;
background: var(--color-border); background: var(--fs-border-color);
} }
.card-body { .card-body {
@@ -163,7 +163,7 @@ onMounted(async () => {
.card-title { .card-title {
font-weight: 600; font-weight: 600;
font-size: 0.95rem; font-size: 0.95rem;
color: var(--color-text); color: var(--fs-text-primary);
margin-bottom: 0.3rem; margin-bottom: 0.3rem;
white-space: nowrap; white-space: nowrap;
overflow: hidden; overflow: hidden;
@@ -179,12 +179,12 @@ onMounted(async () => {
.card-owner { .card-owner {
font-size: 0.78rem; font-size: 0.78rem;
color: var(--color-muted); color: var(--fs-text-tertiary);
} }
.card-desc { .card-desc {
font-size: 0.82rem; font-size: 0.82rem;
color: var(--color-muted); color: var(--fs-text-tertiary);
margin: 0; margin: 0;
overflow: hidden; overflow: hidden;
display: -webkit-box; display: -webkit-box;
@@ -203,25 +203,25 @@ onMounted(async () => {
align-items: center; align-items: center;
gap: 0.6rem; gap: 0.6rem;
padding: 0.6rem 0.9rem; padding: 0.6rem 0.9rem;
background: var(--color-surface); background: var(--fs-surface-hover);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: 8px; border-radius: 8px;
text-decoration: none; text-decoration: none;
transition: background 0.1s; transition: background 0.1s;
} }
.shared-row:hover { .shared-row:hover {
background: var(--color-hover); background: var(--fs-surface-hover);
} }
.row-icon { .row-icon {
font-size: 0.9rem; font-size: 0.9rem;
flex-shrink: 0; flex-shrink: 0;
color: var(--color-muted); color: var(--fs-text-tertiary);
} }
.row-title { .row-title {
flex: 1; flex: 1;
font-size: 0.9rem; font-size: 0.9rem;
color: var(--color-text); color: var(--fs-text-primary);
font-weight: 500; font-weight: 500;
white-space: nowrap; white-space: nowrap;
overflow: hidden; overflow: hidden;
@@ -229,7 +229,7 @@ onMounted(async () => {
} }
.row-owner { .row-owner {
font-size: 0.78rem; font-size: 0.78rem;
color: var(--color-muted); color: var(--fs-text-tertiary);
white-space: nowrap; white-space: nowrap;
} }
@@ -242,12 +242,12 @@ onMounted(async () => {
border-radius: 4px; border-radius: 4px;
white-space: nowrap; white-space: nowrap;
} }
.perm-viewer { background: color-mix(in srgb, var(--color-muted) 15%, transparent); color: var(--color-muted); } .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(--color-primary) 15%, transparent); color: var(--color-primary); } .perm-editor { background: color-mix(in srgb, var(--fs-accent) 15%, transparent); color: var(--fs-accent); }
.perm-admin { background: color-mix(in srgb, var(--color-warning) 15%, transparent); color: var(--color-warning); } .perm-admin { background: color-mix(in srgb, var(--fs-warning) 15%, transparent); color: var(--fs-warning); }
.empty-msg { .empty-msg {
color: var(--color-muted); color: var(--fs-text-tertiary);
font-size: 0.88rem; font-size: 0.88rem;
margin: 0; margin: 0;
padding: 1rem 0; padding: 1rem 0;
+33 -33
View File
@@ -205,7 +205,7 @@ async function confirmDelete() {
.snippet-detail { .snippet-detail {
max-width: 820px; max-width: 820px;
margin: 2rem auto; margin: 2rem auto;
padding: 0 var(--page-padding-x); padding: 0 var(--fs-layout-page-pad);
overflow-x: clip; overflow-x: clip;
} }
@@ -213,20 +213,20 @@ async function confirmDelete() {
display: inline-block; display: inline-block;
margin-bottom: 1rem; margin-bottom: 1rem;
font-size: 0.85rem; font-size: 0.85rem;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
text-decoration: none; text-decoration: none;
} }
.back-link:hover { .back-link:hover {
color: var(--color-primary); color: var(--fs-accent);
} }
.state-msg { .state-msg {
color: var(--color-text-muted); color: var(--fs-text-tertiary);
font-size: 0.9rem; font-size: 0.9rem;
margin-top: 1rem; margin-top: 1rem;
} }
.error-msg { .error-msg {
color: var(--color-danger); color: var(--fs-error);
font-size: 0.9rem; font-size: 0.9rem;
margin-top: 1rem; margin-top: 1rem;
} }
@@ -239,7 +239,7 @@ async function confirmDelete() {
} }
.snippet-name { .snippet-name {
margin: 0; margin: 0;
font-family: var(--font-mono); font-family: var(--fs-font-mono);
font-size: 1.4rem; font-size: 1.4rem;
word-break: break-word; word-break: break-word;
} }
@@ -253,7 +253,7 @@ async function confirmDelete() {
.when-to-use { .when-to-use {
margin: 0.75rem 0 1.25rem; margin: 0.75rem 0 1.25rem;
font-size: 1rem; font-size: 1rem;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
line-height: 1.55; line-height: 1.55;
} }
@@ -262,12 +262,12 @@ async function confirmDelete() {
.shared-notice { .shared-notice {
margin: 0.75rem 0 0; margin: 0.75rem 0 0;
padding: 0.6rem 0.85rem; padding: 0.6rem 0.85rem;
border-left: 3px solid var(--color-text-muted); border-left: 3px solid var(--fs-text-tertiary);
border-radius: 6px; border-radius: 6px;
background: var(--color-bg-secondary); background: var(--fs-surface-raised);
font-size: 0.85rem; font-size: 0.85rem;
line-height: 1.5; line-height: 1.5;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
} }
.meta-grid { .meta-grid {
@@ -280,23 +280,23 @@ async function confirmDelete() {
font-size: 0.7rem; font-size: 0.7rem;
text-transform: uppercase; text-transform: uppercase;
letter-spacing: 0.06em; letter-spacing: 0.06em;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
padding-top: 0.15rem; padding-top: 0.15rem;
} }
.meta-grid dd { .meta-grid dd {
margin: 0; margin: 0;
font-size: 0.9rem; font-size: 0.9rem;
color: var(--color-text); color: var(--fs-text-primary);
min-width: 0; min-width: 0;
} }
.meta-grid code, .meta-grid code,
.tag-row + * code { .tag-row + * code {
font-family: var(--font-mono); font-family: var(--fs-font-mono);
font-size: 0.82rem; font-size: 0.82rem;
background: color-mix(in srgb, var(--color-primary) 12%, transparent); background: color-mix(in srgb, var(--fs-accent) 12%, transparent);
color: var(--color-primary); color: var(--fs-accent);
padding: 0.08rem 0.35rem; padding: 0.08rem 0.35rem;
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
word-break: break-all; word-break: break-all;
} }
.location-list { .location-list {
@@ -317,7 +317,7 @@ async function confirmDelete() {
align-items: baseline; align-items: baseline;
} }
.merged-hint { .merged-hint {
color: var(--color-text-muted); color: var(--fs-text-tertiary);
font-size: 0.8rem; font-size: 0.8rem;
} }
.merged-entry { .merged-entry {
@@ -328,15 +328,15 @@ async function confirmDelete() {
.unmerge-btn { .unmerge-btn {
font-size: 0.72rem; font-size: 0.72rem;
padding: 0.05rem 0.35rem; padding: 0.05rem 0.35rem;
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: 4px; border-radius: 4px;
background: transparent; background: transparent;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
cursor: pointer; cursor: pointer;
} }
.unmerge-btn:hover:not(:disabled) { .unmerge-btn:hover:not(:disabled) {
color: var(--color-text); color: var(--fs-text-primary);
border-color: var(--color-text-muted); border-color: var(--fs-text-tertiary);
} }
.unmerge-btn:disabled { .unmerge-btn:disabled {
opacity: 0.6; opacity: 0.6;
@@ -344,30 +344,30 @@ async function confirmDelete() {
} }
.unmerge-na { .unmerge-na {
font-size: 0.72rem; font-size: 0.72rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
/* Cursor cues that the explanation is in the tooltip. */ /* Cursor cues that the explanation is in the tooltip. */
cursor: help; cursor: help;
} }
.code-block { .code-block {
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-md); border-radius: var(--fs-radius-lg);
overflow: hidden; overflow: hidden;
background: var(--color-bg); background: var(--fs-surface-page);
} }
.code-bar { .code-bar {
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
padding: 0.4rem 0.5rem 0.4rem 0.85rem; padding: 0.4rem 0.5rem 0.4rem 0.85rem;
border-bottom: 1px solid var(--color-border); border-bottom: 1px solid var(--fs-border-color);
background: var(--color-bg-secondary); background: var(--fs-surface-raised);
} }
.code-lang { .code-lang {
font-size: 0.72rem; font-size: 0.72rem;
text-transform: uppercase; text-transform: uppercase;
letter-spacing: 0.06em; letter-spacing: 0.06em;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
} }
.btn-copy { .btn-copy {
padding: 0.2rem 0.65rem; padding: 0.2rem 0.65rem;
@@ -379,10 +379,10 @@ async function confirmDelete() {
overflow-x: auto; overflow-x: auto;
} }
.code-block code { .code-block code {
font-family: var(--font-mono); font-family: var(--fs-font-mono);
font-size: 0.85rem; font-size: 0.85rem;
line-height: 1.6; line-height: 1.6;
color: var(--color-text); color: var(--fs-text-primary);
white-space: pre; white-space: pre;
} }
@@ -396,9 +396,9 @@ async function confirmDelete() {
font-size: 0.72rem; font-size: 0.72rem;
padding: 0.15rem 0.5rem; padding: 0.15rem 0.5rem;
border-radius: 999px; border-radius: 999px;
background: var(--color-bg-secondary); background: var(--fs-surface-raised);
color: var(--color-text-secondary); color: var(--fs-text-secondary);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
} }
@media (max-width: 600px) { @media (max-width: 600px) {
+37 -37
View File
@@ -365,7 +365,7 @@ function cancel() {
.snippet-editor { .snippet-editor {
max-width: 760px; max-width: 760px;
margin: 2rem auto; margin: 2rem auto;
padding: 0 var(--page-padding-x); padding: 0 var(--fs-layout-page-pad);
overflow-x: clip; overflow-x: clip;
} }
.snippet-editor h1 { .snippet-editor h1 {
@@ -376,19 +376,19 @@ function cancel() {
display: inline-block; display: inline-block;
margin-bottom: 1rem; margin-bottom: 1rem;
font-size: 0.85rem; font-size: 0.85rem;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
text-decoration: none; text-decoration: none;
} }
.back-link:hover { .back-link:hover {
color: var(--color-primary); color: var(--fs-accent);
} }
.state-msg { .state-msg {
color: var(--color-text-muted); color: var(--fs-text-tertiary);
font-size: 0.9rem; font-size: 0.9rem;
} }
.error-msg { .error-msg {
color: var(--color-danger); color: var(--fs-error);
font-size: 0.9rem; font-size: 0.9rem;
} }
@@ -415,27 +415,27 @@ function cancel() {
.location-set legend { .location-set legend {
font-size: 0.8rem; font-size: 0.8rem;
font-weight: 500; font-weight: 500;
color: var(--color-text); color: var(--fs-text-primary);
} }
.required { .required {
color: var(--color-danger); color: var(--fs-error);
} }
.hint { .hint {
font-size: 0.75rem; font-size: 0.75rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
margin: 0.1rem 0 0; margin: 0.1rem 0 0;
} }
.hint-inline { .hint-inline {
font-weight: 400; font-weight: 400;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
} }
.input { .input {
padding: 0.5rem 0.7rem; padding: 0.5rem 0.7rem;
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
background: var(--color-bg); background: var(--fs-surface-page);
color: var(--color-text); color: var(--fs-text-primary);
font-size: 0.9rem; font-size: 0.9rem;
font-family: inherit; font-family: inherit;
box-sizing: border-box; box-sizing: border-box;
@@ -443,11 +443,11 @@ function cancel() {
} }
.input:focus { .input:focus {
outline: none; outline: none;
border-color: var(--color-primary); border-color: var(--fs-accent);
box-shadow: var(--focus-ring); box-shadow: var(--fs-focus-ring);
} }
.mono { .mono {
font-family: var(--font-mono); font-family: var(--fs-font-mono);
} }
.code-area { .code-area {
resize: vertical; resize: vertical;
@@ -459,8 +459,8 @@ function cancel() {
} }
.location-set { .location-set {
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-md); border-radius: var(--fs-radius-lg);
padding: 0.85rem 1rem 1rem; padding: 0.85rem 1rem 1rem;
margin: 0; margin: 0;
} }
@@ -477,32 +477,32 @@ function cancel() {
.loc-remove { .loc-remove {
width: 2rem; width: 2rem;
height: 2rem; height: 2rem;
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
background: transparent; background: transparent;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
cursor: pointer; cursor: pointer;
font-size: 1.1rem; font-size: 1.1rem;
line-height: 1; line-height: 1;
} }
.loc-remove:hover { .loc-remove:hover {
border-color: var(--color-danger); border-color: var(--fs-error);
color: var(--color-danger); color: var(--fs-error);
} }
.loc-add { .loc-add {
margin-top: 0.15rem; margin-top: 0.15rem;
padding: 0.35rem 0.7rem; padding: 0.35rem 0.7rem;
border: 1px dashed var(--color-border); border: 1px dashed var(--fs-border-color);
background: transparent; background: transparent;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
cursor: pointer; cursor: pointer;
font-size: 0.82rem; font-size: 0.82rem;
font-family: inherit; font-family: inherit;
} }
.loc-add:hover { .loc-add:hover {
border-color: var(--color-primary); border-color: var(--fs-accent);
color: var(--color-primary); color: var(--fs-accent);
} }
@media (max-width: 600px) { @media (max-width: 600px) {
@@ -514,7 +514,7 @@ function cancel() {
.field-label { .field-label {
font-size: 0.8rem; font-size: 0.8rem;
font-weight: 500; font-weight: 500;
color: var(--color-text); color: var(--fs-text-primary);
} }
.systems { .systems {
display: flex; display: flex;
@@ -528,11 +528,11 @@ function cancel() {
align-items: center; align-items: center;
gap: 0.45rem; gap: 0.45rem;
font-size: 0.85rem; font-size: 0.85rem;
color: var(--color-text); color: var(--fs-text-primary);
cursor: pointer; cursor: pointer;
} }
.system-opt input { .system-opt input {
accent-color: var(--color-primary); accent-color: var(--fs-accent);
cursor: pointer; cursor: pointer;
} }
@@ -541,25 +541,25 @@ function cancel() {
flex-direction: column; flex-direction: column;
gap: 0.4rem; gap: 0.4rem;
padding: 0.85rem 1rem; padding: 0.85rem 1rem;
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-left: 3px solid var(--color-warning); border-left: 3px solid var(--fs-warning);
border-radius: 8px; border-radius: 8px;
background: var(--color-bg-secondary); background: var(--fs-surface-raised);
} }
.duplicate-title { .duplicate-title {
margin: 0; margin: 0;
font-size: 0.85rem; font-size: 0.85rem;
font-weight: 500; font-weight: 500;
color: var(--color-text); color: var(--fs-text-primary);
} }
.duplicate-body { .duplicate-body {
margin: 0; margin: 0;
font-size: 0.8rem; font-size: 0.8rem;
line-height: 1.5; line-height: 1.5;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
} }
.duplicate-body a { .duplicate-body a {
color: var(--color-primary); color: var(--fs-accent);
} }
.duplicate-actions { .duplicate-actions {
display: flex; display: flex;
+85 -85
View File
@@ -519,9 +519,9 @@ function usageTitle(s: SnippetListItem): string {
<style scoped> <style scoped>
.snippets-list { .snippets-list {
max-width: var(--page-max-width); max-width: var(--fs-layout-page-max);
margin: 2rem auto; margin: 2rem auto;
padding: 0 var(--page-padding-x); padding: 0 var(--fs-layout-page-pad);
overflow-x: clip; overflow-x: clip;
} }
@@ -536,7 +536,7 @@ function usageTitle(s: SnippetListItem): string {
} }
.page-sub { .page-sub {
margin: 0 0 1.25rem; margin: 0 0 1.25rem;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
font-size: 0.9rem; font-size: 0.9rem;
line-height: 1.5; line-height: 1.5;
max-width: 60ch; max-width: 60ch;
@@ -553,8 +553,8 @@ function usageTitle(s: SnippetListItem): string {
} }
/* Filter is engaged — the accent marks "you are here", per the design system. */ /* Filter is engaged — the accent marks "you are here", per the design system. */
.filter-on { .filter-on {
border-color: var(--color-primary); border-color: var(--fs-accent);
color: var(--color-primary); color: var(--fs-accent);
} }
.location-row { .location-row {
@@ -569,12 +569,12 @@ function usageTitle(s: SnippetListItem): string {
min-width: 0; min-width: 0;
max-width: 12rem; max-width: 12rem;
padding: 0.4rem 0.65rem; padding: 0.4rem 0.65rem;
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
background: var(--color-bg); background: var(--fs-surface-page);
color: var(--color-text); color: var(--fs-text-primary);
font-size: 0.85rem; font-size: 0.85rem;
font-family: var(--font-mono); font-family: var(--fs-font-mono);
box-sizing: border-box; box-sizing: border-box;
} }
.loc-input-wide { .loc-input-wide {
@@ -583,46 +583,46 @@ function usageTitle(s: SnippetListItem): string {
} }
.loc-input::placeholder { .loc-input::placeholder {
font-family: inherit; font-family: inherit;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
} }
.loc-input:focus { .loc-input:focus {
outline: none; outline: none;
border-color: var(--color-primary); border-color: var(--fs-accent);
box-shadow: var(--focus-ring); box-shadow: var(--fs-focus-ring);
} }
.loc-clear { .loc-clear {
padding: 0.4rem 0.65rem; padding: 0.4rem 0.65rem;
border: none; border: none;
background: transparent; background: transparent;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
font-size: 0.85rem; font-size: 0.85rem;
font-family: inherit; font-family: inherit;
cursor: pointer; cursor: pointer;
text-decoration: underline; text-decoration: underline;
} }
.loc-clear:hover { .loc-clear:hover {
color: var(--color-text); color: var(--fs-text-primary);
} }
.search-input { .search-input {
width: 100%; width: 100%;
max-width: 420px; max-width: 420px;
padding: 0.5rem 0.8rem; padding: 0.5rem 0.8rem;
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
background: var(--color-bg); background: var(--fs-surface-page);
color: var(--color-text); color: var(--fs-text-primary);
font-size: 0.9rem; font-size: 0.9rem;
font-family: inherit; font-family: inherit;
box-sizing: border-box; box-sizing: border-box;
} }
.search-input:focus { .search-input:focus {
outline: none; outline: none;
border-color: var(--color-primary); border-color: var(--fs-accent);
box-shadow: var(--focus-ring); box-shadow: var(--fs-focus-ring);
} }
.error-msg { .error-msg {
color: var(--color-danger); color: var(--fs-error);
font-size: 0.9rem; font-size: 0.9rem;
margin-top: 1rem; margin-top: 1rem;
} }
@@ -630,10 +630,10 @@ function usageTitle(s: SnippetListItem): string {
.empty-state-rich { .empty-state-rich {
text-align: center; text-align: center;
padding: 3rem 1rem; padding: 3rem 1rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
} }
.empty-icon { .empty-icon {
font-family: var(--font-mono); font-family: var(--fs-font-mono);
font-size: 2rem; font-size: 2rem;
margin-bottom: 0.75rem; margin-bottom: 0.75rem;
opacity: 0.35; opacity: 0.35;
@@ -641,7 +641,7 @@ function usageTitle(s: SnippetListItem): string {
.empty-title { .empty-title {
font-size: 1rem; font-size: 1rem;
font-weight: 500; font-weight: 500;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
margin: 0 0 0.35rem; margin: 0 0 0.35rem;
} }
.empty-sub { .empty-sub {
@@ -654,16 +654,16 @@ function usageTitle(s: SnippetListItem): string {
.empty-action { .empty-action {
display: inline-block; display: inline-block;
padding: 0.4rem 1rem; padding: 0.4rem 1rem;
border: 1px solid var(--color-action-primary); border: 1px solid var(--fs-action-primary);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
color: var(--color-action-primary); color: var(--fs-action-primary);
background: none; background: none;
cursor: pointer; cursor: pointer;
font-size: 0.85rem; font-size: 0.85rem;
transition: background 0.15s, color 0.15s; transition: background 0.15s, color 0.15s;
} }
.empty-action:hover { .empty-action:hover {
background: var(--color-action-primary); background: var(--fs-action-primary);
color: var(--fs-text-on-action); color: var(--fs-text-on-action);
} }
@@ -675,8 +675,8 @@ function usageTitle(s: SnippetListItem): string {
} }
.skeleton-card { .skeleton-card {
height: 96px; height: 96px;
border-radius: var(--radius-md); border-radius: var(--fs-radius-lg);
background: linear-gradient(90deg, var(--color-bg-secondary) 25%, var(--color-border) 50%, var(--color-bg-secondary) 75%); background: linear-gradient(90deg, var(--fs-surface-raised) 25%, var(--fs-border-color) 50%, var(--fs-surface-raised) 75%);
background-size: 200% 100%; background-size: 200% 100%;
animation: skeleton-shimmer 1.4s ease infinite; animation: skeleton-shimmer 1.4s ease infinite;
} }
@@ -686,9 +686,9 @@ function usageTitle(s: SnippetListItem): string {
} }
.snippet-card { .snippet-card {
background: var(--color-bg-card); background: var(--fs-surface-raised);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-md); border-radius: var(--fs-radius-lg);
padding: 0.9rem 1rem; padding: 0.9rem 1rem;
cursor: pointer; cursor: pointer;
transition: border-color 0.15s, box-shadow 0.15s, transform 0.18s ease; transition: border-color 0.15s, box-shadow 0.15s, transform 0.18s ease;
@@ -697,14 +697,14 @@ function usageTitle(s: SnippetListItem): string {
gap: 0.4rem; gap: 0.4rem;
} }
.snippet-card:hover { .snippet-card:hover {
border-color: var(--color-primary); border-color: var(--fs-accent);
box-shadow: 0 2px 8px var(--color-shadow); box-shadow: 0 2px 8px var(--color-shadow);
transform: translateY(-2px); transform: translateY(-2px);
} }
.snippet-card:focus-visible { .snippet-card:focus-visible {
outline: none; outline: none;
border-color: var(--color-primary); border-color: var(--fs-accent);
box-shadow: var(--focus-ring); box-shadow: var(--fs-focus-ring);
} }
.card-header { .card-header {
@@ -716,11 +716,11 @@ function usageTitle(s: SnippetListItem): string {
.snippet-name { .snippet-name {
font-size: 0.95rem; font-size: 0.95rem;
font-weight: 500; font-weight: 500;
color: var(--color-text); color: var(--fs-text-primary);
min-width: 0; min-width: 0;
flex: 1; flex: 1;
word-break: break-word; word-break: break-word;
font-family: var(--font-mono); font-family: var(--fs-font-mono);
} }
/* Language tag — accent pill per the design system's tag treatment. */ /* Language tag — accent pill per the design system's tag treatment. */
@@ -731,13 +731,13 @@ function usageTitle(s: SnippetListItem): string {
border-radius: 999px; border-radius: 999px;
flex-shrink: 0; flex-shrink: 0;
white-space: nowrap; white-space: nowrap;
background: color-mix(in srgb, var(--color-primary) 15%, transparent); background: color-mix(in srgb, var(--fs-accent) 15%, transparent);
color: var(--color-primary); color: var(--fs-accent);
} }
.snippet-when { .snippet-when {
font-size: 0.83rem; font-size: 0.83rem;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
margin: 0; margin: 0;
line-height: 1.45; line-height: 1.45;
} }
@@ -751,7 +751,7 @@ function usageTitle(s: SnippetListItem): string {
} }
.meta-date { .meta-date {
font-size: 0.73rem; font-size: 0.73rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
} }
/* Marks a record someone else owns. Present only on shared rows, so an /* Marks a record someone else owns. Present only on shared rows, so an
unmarked card is unambiguously the operator's own. */ unmarked card is unambiguously the operator's own. */
@@ -760,24 +760,24 @@ function usageTitle(s: SnippetListItem): string {
padding: 0.1rem 0.4rem; padding: 0.1rem 0.4rem;
border-radius: 4px; border-radius: 4px;
white-space: nowrap; white-space: nowrap;
background: color-mix(in srgb, var(--color-text-muted) 15%, transparent); background: color-mix(in srgb, var(--fs-text-tertiary) 15%, transparent);
color: var(--color-text-muted); color: var(--fs-text-tertiary);
} }
/* Near-duplicate report */ /* Near-duplicate report */
.dup-panel { .dup-panel {
margin-bottom: 1.25rem; margin-bottom: 1.25rem;
padding: 0.85rem 1rem; padding: 0.85rem 1rem;
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: 8px; border-radius: 8px;
background: var(--color-surface-alt); background: var(--fs-surface-hover);
} }
.dup-empty, .dup-empty,
.dup-head { .dup-head {
margin: 0 0 0.5rem; margin: 0 0 0.5rem;
font-size: 0.85rem; font-size: 0.85rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
} }
.dup-empty { .dup-empty {
@@ -790,7 +790,7 @@ function usageTitle(s: SnippetListItem): string {
gap: 0.75rem; gap: 0.75rem;
flex-wrap: wrap; flex-wrap: wrap;
padding: 0.5rem 0; padding: 0.5rem 0;
border-top: 1px solid var(--color-border); border-top: 1px solid var(--fs-border-color);
} }
.dup-members { .dup-members {
@@ -805,14 +805,14 @@ function usageTitle(s: SnippetListItem): string {
font-size: 0.8rem; font-size: 0.8rem;
padding: 0.1rem 0.45rem; padding: 0.1rem 0.45rem;
border-radius: 4px; border-radius: 4px;
background: color-mix(in srgb, var(--color-text-muted) 12%, transparent); background: color-mix(in srgb, var(--fs-text-tertiary) 12%, transparent);
/* Long snippet names must not push the row into a horizontal scroll. */ /* Long snippet names must not push the row into a horizontal scroll. */
overflow-wrap: anywhere; overflow-wrap: anywhere;
} }
.dup-score { .dup-score {
font-size: 0.75rem; font-size: 0.75rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
font-variant-numeric: tabular-nums; font-variant-numeric: tabular-nums;
white-space: nowrap; white-space: nowrap;
} }
@@ -828,8 +828,8 @@ function usageTitle(s: SnippetListItem): string {
padding: 0.1rem 0.4rem; padding: 0.1rem 0.4rem;
border-radius: 4px; border-radius: 4px;
white-space: nowrap; white-space: nowrap;
background: color-mix(in srgb, var(--color-danger) 15%, transparent); background: color-mix(in srgb, var(--fs-error) 15%, transparent);
color: var(--color-danger); color: var(--fs-error);
} }
.usage-tag { .usage-tag {
@@ -838,15 +838,15 @@ function usageTitle(s: SnippetListItem): string {
border-radius: 4px; border-radius: 4px;
white-space: nowrap; white-space: nowrap;
font-variant-numeric: tabular-nums; font-variant-numeric: tabular-nums;
background: color-mix(in srgb, var(--color-text-muted) 15%, transparent); background: color-mix(in srgb, var(--fs-text-tertiary) 15%, transparent);
color: var(--color-text-muted); color: var(--fs-text-tertiary);
} }
/* Dead weight is a nudge, not an error — it warns in the warning colour rather /* Dead weight is a nudge, not an error — it warns in the warning colour rather
than the danger one, because the record isn't broken, just unearned. */ than the danger one, because the record isn't broken, just unearned. */
.usage-tag.usage-dead { .usage-tag.usage-dead {
background: color-mix(in srgb, var(--color-warning) 18%, transparent); background: color-mix(in srgb, var(--fs-warning) 18%, transparent);
color: var(--color-warning); color: var(--fs-warning);
} }
/* Header + select-mode */ /* Header + select-mode */
@@ -858,7 +858,7 @@ function usageTitle(s: SnippetListItem): string {
/* Selected card = 2px accent border per the design system (featured/active). */ /* Selected card = 2px accent border per the design system (featured/active). */
.snippet-card.selected { .snippet-card.selected {
border-color: var(--color-primary); border-color: var(--fs-accent);
border-width: 2px; border-width: 2px;
padding: calc(0.9rem - 1px) calc(1rem - 1px); padding: calc(0.9rem - 1px) calc(1rem - 1px);
} }
@@ -867,14 +867,14 @@ function usageTitle(s: SnippetListItem): string {
height: 16px; height: 16px;
flex-shrink: 0; flex-shrink: 0;
margin-top: 0.15rem; margin-top: 0.15rem;
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: 4px; border-radius: 4px;
background: transparent; background: transparent;
transition: background 0.12s, border-color 0.12s; transition: background 0.12s, border-color 0.12s;
} }
.select-box.on { .select-box.on {
background: var(--color-primary); background: var(--fs-accent);
border-color: var(--color-primary); border-color: var(--fs-accent);
} }
.select-bar { .select-bar {
@@ -885,19 +885,19 @@ function usageTitle(s: SnippetListItem): string {
align-items: center; align-items: center;
gap: 0.75rem; gap: 0.75rem;
padding: 0.6rem 0.9rem; padding: 0.6rem 0.9rem;
background: var(--color-bg-card); background: var(--fs-surface-raised);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-md); border-radius: var(--fs-radius-lg);
box-shadow: 0 4px 16px var(--color-shadow); box-shadow: 0 4px 16px var(--color-shadow);
} }
.select-count { .select-count {
font-weight: 500; font-weight: 500;
font-size: 0.9rem; font-size: 0.9rem;
color: var(--color-text); color: var(--fs-text-primary);
} }
.select-hint { .select-hint {
font-size: 0.8rem; font-size: 0.8rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
flex: 1; flex: 1;
min-width: 0; min-width: 0;
} }
@@ -906,16 +906,16 @@ function usageTitle(s: SnippetListItem): string {
.modal-overlay { .modal-overlay {
position: fixed; position: fixed;
inset: 0; inset: 0;
background: var(--color-overlay); background: var(--fs-overlay);
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
z-index: 200; z-index: 200;
} }
.modal-card { .modal-card {
background: var(--color-bg-card); background: var(--fs-surface-raised);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-md); border-radius: var(--fs-radius-lg);
padding: 1.5rem; padding: 1.5rem;
width: 100%; width: 100%;
max-width: 460px; max-width: 460px;
@@ -931,7 +931,7 @@ function usageTitle(s: SnippetListItem): string {
.modal-desc { .modal-desc {
margin: 0; margin: 0;
font-size: 0.85rem; font-size: 0.85rem;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
line-height: 1.5; line-height: 1.5;
} }
.merge-choices { .merge-choices {
@@ -944,18 +944,18 @@ function usageTitle(s: SnippetListItem): string {
align-items: center; align-items: center;
gap: 0.6rem; gap: 0.6rem;
padding: 0.5rem 0.7rem; padding: 0.5rem 0.7rem;
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
cursor: pointer; cursor: pointer;
} }
.merge-choice.chosen { .merge-choice.chosen {
border-color: var(--color-primary); border-color: var(--fs-accent);
background: color-mix(in srgb, var(--color-primary) 8%, transparent); background: color-mix(in srgb, var(--fs-accent) 8%, transparent);
} }
.merge-choice-name { .merge-choice-name {
flex: 1; flex: 1;
min-width: 0; min-width: 0;
font-family: var(--font-mono); font-family: var(--fs-font-mono);
font-size: 0.85rem; font-size: 0.85rem;
word-break: break-word; word-break: break-word;
} }
@@ -963,7 +963,7 @@ function usageTitle(s: SnippetListItem): string {
font-size: 0.68rem; font-size: 0.68rem;
text-transform: uppercase; text-transform: uppercase;
letter-spacing: 0.05em; letter-spacing: 0.05em;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
flex-shrink: 0; flex-shrink: 0;
} }
.modal-actions { .modal-actions {
@@ -973,24 +973,24 @@ function usageTitle(s: SnippetListItem): string {
} }
.modal-btn { .modal-btn {
padding: 0.4rem 0.9rem; padding: 0.4rem 0.9rem;
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
background: var(--color-bg-secondary); background: var(--fs-surface-raised);
color: var(--color-text); color: var(--fs-text-primary);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
cursor: pointer; cursor: pointer;
font-size: 0.875rem; font-size: 0.875rem;
font-family: inherit; font-family: inherit;
} }
.modal-btn:hover { .modal-btn:hover {
background: var(--color-bg); background: var(--fs-surface-page);
} }
.modal-btn-primary { .modal-btn-primary {
background: var(--color-action-primary); background: var(--fs-action-primary);
border-color: var(--color-action-primary); border-color: var(--fs-action-primary);
color: var(--fs-text-on-action); color: var(--fs-text-on-action);
} }
.modal-btn-primary:hover:not(:disabled) { .modal-btn-primary:hover:not(:disabled) {
background: var(--color-action-primary-hover); background: var(--fs-action-primary-hover);
} }
.modal-btn-primary:disabled { .modal-btn-primary:disabled {
opacity: 0.5; opacity: 0.5;
+40 -40
View File
@@ -830,7 +830,7 @@ useEditorGuards(dirty, save);
gap: 0.75rem; gap: 0.75rem;
flex-wrap: wrap; flex-wrap: wrap;
padding-bottom: 0.5rem; padding-bottom: 0.5rem;
border-bottom: 1px solid var(--color-border); border-bottom: 1px solid var(--fs-border-color);
} }
/* .task-main is a flex column; without flex-shrink: 0, long body content /* .task-main is a flex column; without flex-shrink: 0, long body content
@@ -852,7 +852,7 @@ useEditorGuards(dirty, save);
.task-sidebar { .task-sidebar {
width: 280px; width: 280px;
flex-shrink: 0; flex-shrink: 0;
border-left: 1px solid var(--color-border); border-left: 1px solid var(--fs-border-color);
overflow-y: auto; overflow-y: auto;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
@@ -866,21 +866,21 @@ useEditorGuards(dirty, save);
background: none; background: none;
border: none; border: none;
cursor: pointer; cursor: pointer;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
font-size: 1.1rem; font-size: 1.1rem;
line-height: 1; line-height: 1;
padding: 0 0.2rem; padding: 0 0.2rem;
flex-shrink: 0; flex-shrink: 0;
} }
.btn-clear-parent:hover { color: var(--color-danger); } .btn-clear-parent:hover { color: var(--fs-error); }
.parent-dropdown { .parent-dropdown {
position: absolute; position: absolute;
top: calc(100% + 4px); top: calc(100% + 4px);
left: 0; left: 0;
right: 0; right: 0;
background: var(--color-bg-card); background: var(--fs-surface-raised);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
box-shadow: 0 4px 12px var(--color-shadow); box-shadow: 0 4px 12px var(--color-shadow);
z-index: 50; z-index: 50;
max-height: 200px; max-height: 200px;
@@ -890,21 +890,21 @@ useEditorGuards(dirty, save);
padding: 0.4rem 0.65rem; padding: 0.4rem 0.65rem;
font-size: 0.85rem; font-size: 0.85rem;
cursor: pointer; cursor: pointer;
color: var(--color-text); color: var(--fs-text-primary);
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
white-space: nowrap; white-space: nowrap;
} }
.parent-dropdown-item:hover { background: var(--color-bg-secondary); } .parent-dropdown-item:hover { background: var(--fs-surface-raised); }
.parent-empty { color: var(--color-text-muted); cursor: default; } .parent-empty { color: var(--fs-text-tertiary); cursor: default; }
.parent-empty:hover { background: none; } .parent-empty:hover { background: none; }
/* Sub-tasks */ /* Sub-tasks */
.subtasks-section { .subtasks-section {
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
padding: 0.5rem 0.65rem; padding: 0.5rem 0.65rem;
background: var(--color-bg-secondary); background: var(--fs-surface-raised);
} }
.subtasks-header { .subtasks-header {
display: flex; display: flex;
@@ -915,23 +915,23 @@ useEditorGuards(dirty, save);
.subtasks-label { .subtasks-label {
font-size: 0.75rem; font-size: 0.75rem;
font-weight: 500; font-weight: 500;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
text-transform: uppercase; text-transform: uppercase;
letter-spacing: 0.04em; letter-spacing: 0.04em;
} }
.subtask-checkbox { flex-shrink: 0; cursor: pointer; } .subtask-checkbox { flex-shrink: 0; cursor: pointer; }
.subtask-title { .subtask-title {
font-size: 0.83rem; font-size: 0.83rem;
color: var(--color-text); color: var(--fs-text-primary);
text-decoration: none; text-decoration: none;
flex: 1; flex: 1;
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
white-space: nowrap; white-space: nowrap;
} }
.subtask-title:hover { color: var(--color-primary); } .subtask-title:hover { color: var(--fs-accent); }
.subtask-title.done { text-decoration: line-through; color: var(--color-text-muted); } .subtask-title.done { text-decoration: line-through; color: var(--fs-text-tertiary); }
.subtasks-empty { font-size: 0.78rem; color: var(--color-text-muted); margin: 0; } .subtasks-empty { font-size: 0.78rem; color: var(--fs-text-tertiary); margin: 0; }
.subtask-add-row { .subtask-add-row {
display: flex; display: flex;
align-items: center; align-items: center;
@@ -941,19 +941,19 @@ useEditorGuards(dirty, save);
.subtask-input { .subtask-input {
flex: 1; flex: 1;
padding: 0.25rem 0.4rem; padding: 0.25rem 0.4rem;
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
background: var(--color-bg); background: var(--fs-surface-page);
color: var(--color-text); color: var(--fs-text-primary);
font-size: 0.83rem; font-size: 0.83rem;
font-family: inherit; font-family: inherit;
} }
.subtask-input:focus { outline: none; border-color: var(--color-primary); } .subtask-input:focus { outline: none; border-color: var(--fs-accent); }
.stream-preview { .stream-preview {
border: 1px solid var(--color-input-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
padding: 0.75rem; padding: 0.75rem;
background: var(--color-bg-card); background: var(--fs-surface-raised);
min-height: 200px; min-height: 200px;
} }
.main-diff { .main-diff {
@@ -963,9 +963,9 @@ useEditorGuards(dirty, save);
/* Systems multi-select (in sidebar) */ /* Systems multi-select (in sidebar) */
.sb-systems { display: flex; flex-direction: column; gap: 0.25rem; max-height: 160px; overflow-y: auto; } .sb-systems { display: flex; flex-direction: column; gap: 0.25rem; max-height: 160px; overflow-y: auto; }
.sb-system-opt { display: flex; align-items: center; gap: 0.45rem; font-size: 0.85rem; color: var(--color-text); cursor: pointer; } .sb-system-opt { display: flex; align-items: center; gap: 0.45rem; font-size: 0.85rem; color: var(--fs-text-primary); cursor: pointer; }
.sb-system-opt input { accent-color: var(--color-primary); cursor: pointer; } .sb-system-opt input { accent-color: var(--fs-accent); cursor: pointer; }
.sb-systems-empty { margin: 0; font-size: 0.8rem; color: var(--color-text-muted); } .sb-systems-empty { margin: 0; font-size: 0.8rem; color: var(--fs-text-tertiary); }
/* Writing Assistant section (in sidebar) */ /* Writing Assistant section (in sidebar) */
.assist-section { .assist-section {
@@ -976,7 +976,7 @@ useEditorGuards(dirty, save);
.assist-section-title { .assist-section-title {
font-size: 0.78rem; font-size: 0.78rem;
font-weight: 500; font-weight: 500;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
text-transform: uppercase; text-transform: uppercase;
letter-spacing: 0.05em; letter-spacing: 0.05em;
} }
@@ -1007,11 +1007,11 @@ useEditorGuards(dirty, save);
font-size: 0.75rem; font-size: 0.75rem;
} }
.sb-ts-label { .sb-ts-label {
color: var(--color-text-muted); color: var(--fs-text-tertiary);
flex-shrink: 0; flex-shrink: 0;
} }
.sb-ts-value { .sb-ts-value {
color: var(--color-text-secondary); color: var(--fs-text-secondary);
text-align: right; text-align: right;
} }
@@ -1022,7 +1022,7 @@ useEditorGuards(dirty, save);
.task-sidebar { .task-sidebar {
width: 100%; width: 100%;
border-left: none; border-left: none;
border-top: 1px solid var(--color-border); border-top: 1px solid var(--fs-border-color);
overflow-y: visible; overflow-y: visible;
} }
} }
@@ -1035,13 +1035,13 @@ useEditorGuards(dirty, save);
margin: 0.5rem 0 0.25rem; margin: 0.5rem 0 0.25rem;
} }
.task-goal-label { .task-goal-label {
font-family: var(--font-display); font-family: var(--fs-font-display);
font-style: italic; font-style: italic;
font-size: 0.78rem; font-size: 0.78rem;
font-weight: 500; font-weight: 500;
letter-spacing: 0.04em; letter-spacing: 0.04em;
text-transform: uppercase; text-transform: uppercase;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
} }
.task-goal-input { .task-goal-input {
width: 100%; width: 100%;
@@ -1051,14 +1051,14 @@ useEditorGuards(dirty, save);
font: inherit; font: inherit;
font-size: 0.95rem; font-size: 0.95rem;
line-height: 1.4; line-height: 1.4;
color: var(--color-text); color: var(--fs-text-primary);
background: var(--color-input-bg); background: var(--fs-surface-page);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-md); border-radius: var(--fs-radius-lg);
} }
.task-goal-input:focus { .task-goal-input:focus {
outline: none; outline: none;
border-color: var(--color-primary); border-color: var(--fs-accent);
} }
</style> </style>
+42 -42
View File
@@ -475,7 +475,7 @@ const subTaskProgress = computed(() => {
gap: 0.5rem; gap: 0.5rem;
flex-wrap: wrap; flex-wrap: wrap;
font-size: 0.83rem; font-size: 0.83rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
margin: 0 0 0.75rem; margin: 0 0 0.75rem;
} }
.meta-item { .meta-item {
@@ -494,10 +494,10 @@ const subTaskProgress = computed(() => {
} }
.due-date { .due-date {
font-size: 0.85rem; font-size: 0.85rem;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
} }
.due-date.overdue { .due-date.overdue {
color: var(--color-overdue); color: var(--fs-overdue);
font-weight: 500; font-weight: 500;
} }
.task-meta-row { .task-meta-row {
@@ -508,10 +508,10 @@ const subTaskProgress = computed(() => {
} }
.task-meta-item { .task-meta-item {
font-size: 0.78rem; font-size: 0.78rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
} }
.task-meta-recurrence { .task-meta-recurrence {
color: var(--color-primary); color: var(--fs-accent);
font-weight: 500; font-weight: 500;
} }
.tags { .tags {
@@ -524,7 +524,7 @@ const subTaskProgress = computed(() => {
/* Sub-tasks */ /* Sub-tasks */
.subtasks { .subtasks {
margin-top: 2rem; margin-top: 2rem;
border-top: 1px solid var(--color-border); border-top: 1px solid var(--fs-border-color);
padding-top: 1rem; padding-top: 1rem;
} }
.subtasks-header { .subtasks-header {
@@ -540,21 +540,21 @@ const subTaskProgress = computed(() => {
} }
.subtasks-progress { .subtasks-progress {
font-size: 0.8rem; font-size: 0.8rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
} }
.subtasks-pct { .subtasks-pct {
color: var(--color-text-muted); color: var(--fs-text-tertiary);
} }
.subtasks-track { .subtasks-track {
height: 4px; height: 4px;
background: var(--color-bg-secondary); background: var(--fs-surface-raised);
border-radius: 2px; border-radius: 2px;
margin-bottom: 0.75rem; margin-bottom: 0.75rem;
overflow: hidden; overflow: hidden;
} }
.subtasks-fill { .subtasks-fill {
height: 100%; height: 100%;
background: var(--color-status-done); background: var(--fs-status-done);
border-radius: 2px; border-radius: 2px;
transition: width 0.3s ease; transition: width 0.3s ease;
} }
@@ -571,10 +571,10 @@ const subTaskProgress = computed(() => {
align-items: center; align-items: center;
gap: 0.5rem; gap: 0.5rem;
padding: 0.3rem 0.5rem; padding: 0.3rem 0.5rem;
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
} }
.subtask-row:hover { .subtask-row:hover {
background: var(--color-bg-secondary); background: var(--fs-surface-raised);
} }
.sub-dot { .sub-dot {
flex-shrink: 0; flex-shrink: 0;
@@ -592,21 +592,21 @@ const subTaskProgress = computed(() => {
} }
.dot-todo { .dot-todo {
background: transparent; background: transparent;
border: 2px solid var(--color-text-muted); border: 2px solid var(--fs-text-tertiary);
} }
.dot-in-progress { .dot-in-progress {
background: var(--color-status-in-progress); background: var(--fs-status-in-progress);
} }
.dot-done { .dot-done {
background: var(--color-status-done); background: var(--fs-status-done);
} }
.dot-cancelled { .dot-cancelled {
background: var(--color-text-muted); background: var(--fs-text-tertiary);
} }
.sub-title { .sub-title {
flex: 1; flex: 1;
font-size: 0.9rem; font-size: 0.9rem;
color: var(--color-text); color: var(--fs-text-primary);
text-decoration: none; text-decoration: none;
min-width: 0; min-width: 0;
overflow: hidden; overflow: hidden;
@@ -614,21 +614,21 @@ const subTaskProgress = computed(() => {
white-space: nowrap; white-space: nowrap;
} }
.sub-title:hover { .sub-title:hover {
color: var(--color-primary); color: var(--fs-accent);
} }
.sub-title.sub-done { .sub-title.sub-done {
color: var(--color-text-muted); color: var(--fs-text-tertiary);
text-decoration: line-through; text-decoration: line-through;
} }
.sub-due { .sub-due {
font-size: 0.75rem; font-size: 0.75rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
flex-shrink: 0; flex-shrink: 0;
} }
.backlinks { .backlinks {
margin-top: 2.5rem; margin-top: 2.5rem;
border-top: 1px solid var(--color-border); border-top: 1px solid var(--fs-border-color);
padding-top: 1.25rem; padding-top: 1.25rem;
} }
.backlinks-heading { .backlinks-heading {
@@ -639,14 +639,14 @@ const subTaskProgress = computed(() => {
font-weight: 500; font-weight: 500;
text-transform: uppercase; text-transform: uppercase;
letter-spacing: 0.06em; letter-spacing: 0.06em;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
margin: 0 0 0.75rem; margin: 0 0 0.75rem;
} }
.backlinks-count { .backlinks-count {
margin-left: 0.2rem; margin-left: 0.2rem;
font-size: 0.72rem; font-size: 0.72rem;
background: var(--color-bg-secondary); background: var(--fs-surface-raised);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: 999px; border-radius: 999px;
padding: 0 0.4rem; padding: 0 0.4rem;
line-height: 1.4; line-height: 1.4;
@@ -661,18 +661,18 @@ const subTaskProgress = computed(() => {
align-items: center; align-items: center;
gap: 0.6rem; gap: 0.6rem;
padding: 0.5rem 0.75rem; padding: 0.5rem 0.75rem;
border-radius: var(--radius-md); border-radius: var(--fs-radius-lg);
background: var(--color-bg-card); background: var(--fs-surface-raised);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
text-decoration: none; text-decoration: none;
color: var(--color-text); color: var(--fs-text-primary);
transition: border-color 0.15s, box-shadow 0.15s; transition: border-color 0.15s, box-shadow 0.15s;
font-size: 0.9rem; font-size: 0.9rem;
} }
.backlink-card:hover { .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); box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
color: var(--color-primary); color: var(--fs-accent);
} }
.backlink-type-badge { .backlink-type-badge {
font-size: 0.68rem; font-size: 0.68rem;
@@ -684,9 +684,9 @@ const subTaskProgress = computed(() => {
flex-shrink: 0; flex-shrink: 0;
} }
.badge-note { .badge-note {
background: color-mix(in srgb, var(--color-primary) 12%, transparent); background: color-mix(in srgb, var(--fs-accent) 12%, transparent);
color: var(--color-primary); color: var(--fs-accent);
border: 1px solid color-mix(in srgb, var(--color-primary) 25%, transparent); border: 1px solid color-mix(in srgb, var(--fs-accent) 25%, transparent);
} }
.badge-task { .badge-task {
background: color-mix(in srgb, #f59e0b 12%, transparent); background: color-mix(in srgb, #f59e0b 12%, transparent);
@@ -716,12 +716,12 @@ const subTaskProgress = computed(() => {
.skel-meta, .skel-meta,
.skel-badges, .skel-badges,
.skel-line { .skel-line {
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
background: linear-gradient( background: linear-gradient(
90deg, 90deg,
var(--color-bg-secondary) 25%, var(--fs-surface-raised) 25%,
color-mix(in srgb, var(--color-text-muted) 18%, var(--color-bg-secondary)) 50%, color-mix(in srgb, var(--fs-text-tertiary) 18%, var(--fs-surface-raised)) 50%,
var(--color-bg-secondary) 75% var(--fs-surface-raised) 75%
); );
background-size: 200% 100%; background-size: 200% 100%;
animation: skel-shine 1.5s ease infinite; animation: skel-shine 1.5s ease infinite;
@@ -733,7 +733,7 @@ const subTaskProgress = computed(() => {
} }
.skel-btn { width: 70px; height: 32px; } .skel-btn { width: 70px; height: 32px; }
.skel-btn--wide { width: 90px; } .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-meta { height: 0.85rem; width: 45%; }
.skel-badges { height: 1.6rem; width: 30%; border-radius: 999px; } .skel-badges { height: 1.6rem; width: 30%; border-radius: 999px; }
.skel-line { height: 0.9rem; } .skel-line { height: 0.9rem; }
@@ -742,26 +742,26 @@ const subTaskProgress = computed(() => {
/* ── Goal block + auto-summary banner ─────────────────────────────────────── */ /* ── Goal block + auto-summary banner ─────────────────────────────────────── */
.task-goal-display { .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; padding: 0.4rem 0 0.4rem 0.9rem;
margin: 0.75rem 0 1.25rem; margin: 0.75rem 0 1.25rem;
background: rgba(255, 255, 255, 0.02); background: rgba(255, 255, 255, 0.02);
} }
.goal-label { .goal-label {
font-family: var(--font-display); font-family: var(--fs-font-display);
font-style: italic; font-style: italic;
font-size: 0.78rem; font-size: 0.78rem;
font-weight: 500; font-weight: 500;
letter-spacing: 0.04em; letter-spacing: 0.04em;
text-transform: uppercase; text-transform: uppercase;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
margin: 0 0 0.25rem; margin: 0 0 0.25rem;
} }
.goal-text { .goal-text {
margin: 0; margin: 0;
font-size: 0.95rem; font-size: 0.95rem;
line-height: 1.45; line-height: 1.45;
color: var(--color-text); color: var(--fs-text-primary);
white-space: pre-wrap; white-space: pre-wrap;
} }
</style> </style>
+3 -3
View File
@@ -68,7 +68,7 @@ onMounted(() => store.fetchTrash());
.batch-count { opacity: 0.6; font-weight: 400; font-size: 0.9em; margin-left: 0.35rem; } .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-meta { font-size: 0.82em; opacity: 0.6; margin-top: 0.25rem; }
.batch-actions { display: flex; gap: 0.5rem; flex-shrink: 0; } .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; } .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(--color-action-primary); color: var(--color-action-primary); } .btn-restore:hover { border-color: var(--fs-action-primary); color: var(--fs-action-primary); }
.btn-purge:hover { border-color: var(--color-action-destructive); color: var(--color-action-destructive); } .btn-purge:hover { border-color: var(--fs-action-destructive); color: var(--fs-action-destructive); }
</style> </style>
+29 -29
View File
@@ -297,9 +297,9 @@ function formatDate(iso: string): string {
margin: 0 0 1.5rem; margin: 0 0 1.5rem;
} }
.settings-section { .settings-section {
background: var(--color-bg-card); background: var(--fs-surface-raised);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-md); border-radius: var(--fs-radius-lg);
padding: 1.25rem; padding: 1.25rem;
margin-bottom: 1.5rem; margin-bottom: 1.5rem;
} }
@@ -317,16 +317,16 @@ function formatDate(iso: string): string {
.invite-input { .invite-input {
flex: 1; flex: 1;
padding: 0.5rem 0.75rem; padding: 0.5rem 0.75rem;
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
font-size: 0.95rem; font-size: 0.95rem;
background: var(--color-bg); background: var(--fs-surface-page);
color: var(--color-text); color: var(--fs-text-primary);
box-sizing: border-box; box-sizing: border-box;
} }
.invite-input:focus { .invite-input:focus {
outline: none; outline: none;
border-color: var(--color-primary); border-color: var(--fs-accent);
} }
.invite-list { .invite-list {
margin-top: 1rem; margin-top: 1rem;
@@ -334,7 +334,7 @@ function formatDate(iso: string): string {
.invite-list h3 { .invite-list h3 {
margin: 0 0 0.5rem; margin: 0 0 0.5rem;
font-size: 0.95rem; font-size: 0.95rem;
color: var(--color-text-secondary); color: var(--fs-text-secondary);
} }
/* Registration toggle */ /* Registration toggle */
@@ -352,33 +352,33 @@ function formatDate(iso: string): string {
font-size: 0.95rem; font-size: 0.95rem;
} }
.text-success { .text-success {
color: var(--color-success); color: var(--fs-success);
} }
.text-muted { .text-muted {
color: var(--color-text-muted); color: var(--fs-text-tertiary);
} }
.field-hint { .field-hint {
margin: 0.35rem 0 0; margin: 0.35rem 0 0;
font-size: 0.8rem; 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 /* The one genuine override: 'close registration' must NOT read as the
primary action it sits on. Scoped, so it beats the shared variant. */ primary action it sits on. Scoped, so it beats the shared variant. */
.btn-toggle-close { .btn-toggle-close {
background: var(--color-bg-secondary); background: var(--fs-surface-raised);
color: var(--color-text); color: var(--fs-text-primary);
border: 1px solid var(--color-border); border: 1px solid var(--fs-border-color);
} }
.btn-toggle-close:hover:not(:disabled) { .btn-toggle-close:hover:not(:disabled) {
border-color: var(--color-warning); border-color: var(--fs-warning);
color: var(--color-warning); color: var(--fs-warning);
} }
/* Users table */ /* Users table */
.loading-msg, .loading-msg,
.empty-msg { .empty-msg {
text-align: center; text-align: center;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
font-size: 0.9rem; font-size: 0.9rem;
padding: 1rem 0; padding: 1rem 0;
} }
@@ -392,13 +392,13 @@ function formatDate(iso: string): string {
font-weight: 600; font-weight: 600;
text-transform: uppercase; text-transform: uppercase;
letter-spacing: 0.05em; letter-spacing: 0.05em;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
padding: 0.5rem 0.75rem; padding: 0.5rem 0.75rem;
border-bottom: 1px solid var(--color-border); border-bottom: 1px solid var(--fs-border-color);
} }
.users-table td { .users-table td {
padding: 0.65rem 0.75rem; padding: 0.65rem 0.75rem;
border-bottom: 1px solid var(--color-border); border-bottom: 1px solid var(--fs-border-color);
font-size: 0.9rem; font-size: 0.9rem;
} }
.users-table tbody tr:last-child td { .users-table tbody tr:last-child td {
@@ -408,10 +408,10 @@ function formatDate(iso: string): string {
font-weight: 600; font-weight: 600;
} }
.cell-email { .cell-email {
color: var(--color-text-secondary); color: var(--fs-text-secondary);
} }
.cell-date { .cell-date {
color: var(--color-text-muted); color: var(--fs-text-tertiary);
font-size: 0.85rem; font-size: 0.85rem;
} }
.cell-actions { .cell-actions {
@@ -426,21 +426,21 @@ function formatDate(iso: string): string {
text-transform: uppercase; text-transform: uppercase;
letter-spacing: 0.05em; letter-spacing: 0.05em;
padding: 0.15rem 0.4rem; padding: 0.15rem 0.4rem;
border-radius: var(--radius-sm); border-radius: var(--fs-radius-sm);
} }
.role-admin { .role-admin {
color: var(--color-primary); color: var(--fs-accent);
background: color-mix(in srgb, var(--color-primary) 15%, transparent); background: color-mix(in srgb, var(--fs-accent) 15%, transparent);
} }
.role-user { .role-user {
color: var(--color-text-muted); color: var(--fs-text-tertiary);
background: var(--color-bg-secondary); background: var(--fs-surface-raised);
} }
/* Action buttons */ /* Action buttons */
.you-label { .you-label {
font-size: 0.8rem; font-size: 0.8rem;
color: var(--color-text-muted); color: var(--fs-text-tertiary);
} }
@media (max-width: 768px) { @media (max-width: 768px) {