privateboard 0.1.19 → 0.1.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/version.d.ts CHANGED
@@ -12,6 +12,6 @@
12
12
  * number ends up surfaced in the user-facing footer or banner. Keep
13
13
  * this file as the canonical source — every callsite reads from here.
14
14
  */
15
- declare const VERSION = "0.1.19";
15
+ declare const VERSION = "0.1.21";
16
16
 
17
17
  export { VERSION };
package/dist/version.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  // src/version.ts
4
- var VERSION = "0.1.19";
4
+ var VERSION = "0.1.21";
5
5
  export {
6
6
  VERSION
7
7
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/version.ts"],"sourcesContent":["/**\n * Single source of truth for the app version.\n *\n * Imported by `cli.ts` (CLI banner / `--version`), `server.ts` (the\n * `/health` payload + the `/api/version` endpoint), and bundled into\n * the frontend via the version endpoint. Bump alongside `package.json`\n * on every release — the existing `npm version <patch|minor|major>`\n * + commit pattern updates package.json automatically; this file\n * needs the matching manual bump.\n *\n * If two strings drift (bumped one but not the other), the wrong\n * number ends up surfaced in the user-facing footer or banner. Keep\n * this file as the canonical source — every callsite reads from here.\n */\nexport const VERSION = \"0.1.19\";\n"],"mappings":";;;AAcO,IAAM,UAAU;","names":[]}
1
+ {"version":3,"sources":["../src/version.ts"],"sourcesContent":["/**\n * Single source of truth for the app version.\n *\n * Imported by `cli.ts` (CLI banner / `--version`), `server.ts` (the\n * `/health` payload + the `/api/version` endpoint), and bundled into\n * the frontend via the version endpoint. Bump alongside `package.json`\n * on every release — the existing `npm version <patch|minor|major>`\n * + commit pattern updates package.json automatically; this file\n * needs the matching manual bump.\n *\n * If two strings drift (bumped one but not the other), the wrong\n * number ends up surfaced in the user-facing footer or banner. Keep\n * this file as the canonical source — every callsite reads from here.\n */\nexport const VERSION = \"0.1.21\";\n"],"mappings":";;;AAcO,IAAM,UAAU;","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "privateboard",
3
- "version": "0.1.19",
3
+ "version": "0.1.21",
4
4
  "description": "PrivateBoard · your private board meeting, on call. Local-first, multi-agent thinking amplifier.",
5
5
  "type": "module",
6
6
  "main": "electron-entry.cjs",
@@ -21,6 +21,7 @@
21
21
  "test:watch": "vitest",
22
22
  "sync-version": "node scripts/sync-version.mjs",
23
23
  "regen-avatars": "node scripts/regen-avatars.mjs",
24
+ "probe:bai": "node scripts/probe-bai-catalog.mjs",
24
25
  "abi:node": "node scripts/ensure-sqlite-abi.mjs node",
25
26
  "abi:electron": "node scripts/ensure-sqlite-abi.mjs electron",
26
27
  "prepublishOnly": "npm run sync-version && npm run build",
@@ -29,8 +30,9 @@
29
30
  "electron:build-ts": "tsup && tsc -p electron/tsconfig.json",
30
31
  "electron:build-icon": "node scripts/build-app-icon.mjs",
31
32
  "electron:dev": "npm run electron:rebuild && npm run electron:build-ts && electron .",
32
- "electron:dist": "electron-builder install-app-deps && npm run electron:build-ts && npm run electron:build-icon && electron-builder --mac",
33
- "electron:dist:unsigned": "CSC_IDENTITY_AUTO_DISCOVERY=false electron-builder install-app-deps && npm run electron:build-ts && npm run electron:build-icon && CSC_IDENTITY_AUTO_DISCOVERY=false electron-builder --mac --config.mac.hardenedRuntime=false --config.mac.notarize=false"
33
+ "electron:dist": "electron-builder install-app-deps && npm run electron:build-ts && npm run electron:build-icon && electron-builder --mac --publish always",
34
+ "electron:dist:local": "electron-builder install-app-deps && npm run electron:build-ts && npm run electron:build-icon && electron-builder --mac --publish never",
35
+ "electron:dist:unsigned": "CSC_IDENTITY_AUTO_DISCOVERY=false electron-builder install-app-deps && npm run electron:build-ts && npm run electron:build-icon && CSC_IDENTITY_AUTO_DISCOVERY=false electron-builder --mac --publish never --config.mac.hardenedRuntime=false --config.mac.notarize=false"
34
36
  },
35
37
  "repository": {
36
38
  "type": "git",
@@ -53,6 +55,7 @@
53
55
  "ai": "^4.3.16",
54
56
  "better-sqlite3": "^12.10.0",
55
57
  "commander": "^12.1.0",
58
+ "electron-updater": "^6.8.3",
56
59
  "hono": "^4.6.14",
57
60
  "open": "^10.1.0",
58
61
  "tiny-pinyin": "^1.3.2",
@@ -87,6 +90,14 @@
87
90
  "output": "release/",
88
91
  "buildResources": "build/"
89
92
  },
93
+ "publish": [
94
+ {
95
+ "provider": "github",
96
+ "owner": "kaysaith1900",
97
+ "repo": "privateboard",
98
+ "releaseType": "release"
99
+ }
100
+ ],
90
101
  "mac": {
91
102
  "category": "public.app-category.productivity",
92
103
  "target": [
@@ -48,23 +48,23 @@
48
48
  is a terminal / destructive action — visual contrast against
49
49
  room-settings's calmer lime classification. */
50
50
  .adjourn-classification {
51
- background: var(--panel-2, #1A1A18);
52
- border-bottom: 0.5px solid var(--line-bright, #2A2A26);
51
+ background: var(--panel-2);
52
+ border-bottom: 0.5px solid var(--line-bright);
53
53
  padding: 6px 14px;
54
54
  font-family: var(--mono);
55
55
  font-size: 9px;
56
56
  letter-spacing: 0.2em;
57
57
  text-transform: uppercase;
58
- color: var(--amber, #C99826);
58
+ color: var(--amber);
59
59
  display: flex;
60
60
  justify-content: space-between;
61
61
  align-items: center;
62
62
  }
63
63
  .adjourn-classification .dot {
64
- color: var(--amber, #C99826);
64
+ color: var(--amber);
65
65
  }
66
66
  .adjourn-classification .right {
67
- color: var(--text-faint, #3A382F);
67
+ color: var(--text-faint);
68
68
  letter-spacing: 0.12em;
69
69
  }
70
70
 
@@ -74,18 +74,18 @@
74
74
  gap: 14px;
75
75
  align-items: start;
76
76
  padding: 16px 22px 14px;
77
- border-bottom: 0.5px dashed var(--line-bright, #2A2A26);
77
+ border-bottom: 0.5px dashed var(--line-bright);
78
78
  }
79
79
  .adjourn-head .meta {
80
80
  font-family: var(--mono);
81
81
  font-size: 10px;
82
- color: var(--text-dim, #5C5A52);
82
+ color: var(--text-dim);
83
83
  text-transform: uppercase;
84
84
  letter-spacing: 0.12em;
85
85
  margin-bottom: 6px;
86
86
  }
87
87
  .adjourn-head .meta .live {
88
- color: var(--lime, #6FB572);
88
+ color: var(--lime);
89
89
  font-weight: 700;
90
90
  }
91
91
  .adjourn-head .meta .live::before {
@@ -93,7 +93,7 @@
93
93
  animation: adjourn-pulse 1.6s ease-in-out infinite;
94
94
  }
95
95
  .adjourn-head .meta .status {
96
- color: var(--text-soft, #8E8B83);
96
+ color: var(--text-soft);
97
97
  font-weight: 700;
98
98
  }
99
99
  @keyframes adjourn-pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.45; } }
@@ -101,21 +101,21 @@
101
101
  font-family: var(--font-human);
102
102
  font-size: 17px;
103
103
  font-weight: 700;
104
- color: var(--text, #C8C5BE);
104
+ color: var(--text);
105
105
  letter-spacing: -0.012em;
106
106
  line-height: 1.3;
107
107
  }
108
108
  .adjourn-head .title::before {
109
109
  content: "▸ ";
110
- color: var(--lime, #6FB572);
110
+ color: var(--lime);
111
111
  }
112
112
  .adjourn-close {
113
113
  width: 28px;
114
114
  height: 28px;
115
115
  flex-shrink: 0;
116
116
  background: transparent;
117
- border: 0.5px solid var(--line-bright, #2A2A26);
118
- color: var(--text-dim, #5C5A52);
117
+ border: 0.5px solid var(--line-bright);
118
+ color: var(--text-dim);
119
119
  font-size: 14px;
120
120
  line-height: 1;
121
121
  cursor: pointer;
@@ -126,8 +126,8 @@
126
126
  justify-content: center;
127
127
  }
128
128
  .adjourn-close:hover {
129
- border-color: var(--lime, #6FB572);
130
- color: var(--lime, #6FB572);
129
+ border-color: var(--lime);
130
+ color: var(--lime);
131
131
  }
132
132
 
133
133
  /* ─── Body ─── */
@@ -402,16 +402,16 @@
402
402
  padding: 8px 14px;
403
403
  cursor: pointer;
404
404
  background: transparent;
405
- border: 0.5px solid var(--amber, #C99826);
406
- color: var(--amber, #C99826);
405
+ border: 0.5px solid var(--amber);
406
+ color: var(--amber);
407
407
  transition: background 0.12s, color 0.12s;
408
408
  }
409
409
  .adjourn-skip-btn:hover {
410
- background: var(--amber, #C99826);
410
+ background: var(--amber);
411
411
  color: var(--bg);
412
412
  }
413
413
  .adjourn-skip-btn.picked {
414
- background: var(--amber, #C99826);
414
+ background: var(--amber);
415
415
  color: var(--bg);
416
416
  }
417
417
  .adjourn-skip-btn .adjourn-skip-mark {
@@ -37,9 +37,9 @@ img[data-agent]:hover { filter: brightness(1.15); }
37
37
  max-width: 560px;
38
38
  max-height: calc(100vh - 60px);
39
39
  overflow-y: auto;
40
- background: var(--panel, #131312);
41
- border: 0.5px solid var(--line-strong, #3A3A35);
42
- color: var(--text, #C8C5BE);
40
+ background: var(--panel);
41
+ border: 0.5px solid var(--line-strong);
42
+ color: var(--text);
43
43
  animation: agent-rise 0.18s ease-out;
44
44
  /* Auto-hide scrollbar: thumb is transparent until the pointer is
45
45
  over the card OR the card is actively being scrolled (the
@@ -52,7 +52,7 @@ img[data-agent]:hover { filter: brightness(1.15); }
52
52
  transition: scrollbar-color 0.18s;
53
53
  }
54
54
  .agent-card:hover,
55
- .agent-card.is-scrolling { scrollbar-color: var(--text-faint, #3A382F) transparent; }
55
+ .agent-card.is-scrolling { scrollbar-color: var(--text-faint) transparent; }
56
56
  .agent-card::-webkit-scrollbar { width: 8px; }
57
57
  .agent-card::-webkit-scrollbar-track { background: transparent; }
58
58
  .agent-card::-webkit-scrollbar-thumb {
@@ -61,8 +61,8 @@ img[data-agent]:hover { filter: brightness(1.15); }
61
61
  transition: background 0.18s;
62
62
  }
63
63
  .agent-card:hover::-webkit-scrollbar-thumb,
64
- .agent-card.is-scrolling::-webkit-scrollbar-thumb { background: var(--text-faint, #3A382F); }
65
- .agent-card::-webkit-scrollbar-thumb:hover { background: var(--text-soft, #8E8B83); }
64
+ .agent-card.is-scrolling::-webkit-scrollbar-thumb { background: var(--text-faint); }
65
+ .agent-card::-webkit-scrollbar-thumb:hover { background: var(--text-soft); }
66
66
  @keyframes agent-rise {
67
67
  from { transform: translateY(8px); opacity: 0; }
68
68
  to { transform: translateY(0); opacity: 1; }
@@ -72,25 +72,25 @@ img[data-agent]:hover { filter: brightness(1.15); }
72
72
  position: absolute;
73
73
  width: 14px;
74
74
  height: 14px;
75
- border: 2px solid var(--lime, #6FB572);
75
+ border: 2px solid var(--lime);
76
76
  pointer-events: none;
77
77
  }
78
78
  .agent-card::before { top: -1px; left: -1px; border-right: none; border-bottom: none; }
79
79
  .agent-card::after { bottom: -1px; right: -1px; border-left: none; border-top: none; }
80
80
 
81
81
  .agent-classification {
82
- background: var(--panel-2, #1A1A18);
83
- border-bottom: 0.5px solid var(--line-bright, #2A2A26);
82
+ background: var(--panel-2);
83
+ border-bottom: 0.5px solid var(--line-bright);
84
84
  padding: 5px 14px;
85
85
  font-size: 9px;
86
86
  letter-spacing: 0.2em;
87
87
  text-transform: uppercase;
88
- color: var(--lime, #6FB572);
88
+ color: var(--lime);
89
89
  display: flex;
90
90
  justify-content: space-between;
91
91
  align-items: center;
92
92
  }
93
- .agent-classification .right { color: var(--text-faint, #3A382F); letter-spacing: 0.12em; }
93
+ .agent-classification .right { color: var(--text-faint); letter-spacing: 0.12em; }
94
94
 
95
95
  .agent-card-head {
96
96
  display: grid;
@@ -98,13 +98,13 @@ img[data-agent]:hover { filter: brightness(1.15); }
98
98
  gap: 16px;
99
99
  align-items: center;
100
100
  padding: 18px 20px 14px;
101
- border-bottom: 0.5px dashed var(--line-bright, #2A2A26);
101
+ border-bottom: 0.5px dashed var(--line-bright);
102
102
  }
103
103
  .agent-card-avatar {
104
104
  width: 68px;
105
105
  height: 68px;
106
- background: var(--panel-2, #1A1A18);
107
- border: 0.5px solid var(--line-bright, #2A2A26);
106
+ background: var(--panel-2);
107
+ border: 0.5px solid var(--line-bright);
108
108
  padding: 5px;
109
109
  display: block;
110
110
  image-rendering: pixelated;
@@ -112,21 +112,21 @@ img[data-agent]:hover { filter: brightness(1.15); }
112
112
  .agent-card-id .name {
113
113
  font-size: 18px;
114
114
  font-weight: 700;
115
- color: var(--text, #C8C5BE);
115
+ color: var(--text);
116
116
  line-height: 1.1;
117
117
  margin-bottom: 5px;
118
118
  letter-spacing: -0.01em;
119
119
  }
120
120
  .agent-card-id .role {
121
121
  font-size: 10px;
122
- color: var(--lime, #6FB572);
122
+ color: var(--lime);
123
123
  text-transform: uppercase;
124
124
  letter-spacing: 0.16em;
125
125
  font-weight: 700;
126
126
  }
127
127
  .agent-card-id .handle {
128
128
  font-size: 10px;
129
- color: var(--text-faint, #3A382F);
129
+ color: var(--text-faint);
130
130
  margin-top: 5px;
131
131
  letter-spacing: 0.04em;
132
132
  font-family: var(--mono);
@@ -134,8 +134,8 @@ img[data-agent]:hover { filter: brightness(1.15); }
134
134
  .agent-card-close {
135
135
  width: 28px; height: 28px;
136
136
  background: transparent;
137
- border: 0.5px solid var(--line-bright, #2A2A26);
138
- color: var(--text-dim, #5C5A52);
137
+ border: 0.5px solid var(--line-bright);
138
+ color: var(--text-dim);
139
139
  font-size: 14px;
140
140
  cursor: pointer;
141
141
  font-family: var(--mono);
@@ -143,8 +143,8 @@ img[data-agent]:hover { filter: brightness(1.15); }
143
143
  transition: all 0.12s;
144
144
  }
145
145
  .agent-card-close:hover {
146
- border-color: var(--lime, #6FB572);
147
- color: var(--lime, #6FB572);
146
+ border-color: var(--lime);
147
+ color: var(--lime);
148
148
  }
149
149
 
150
150
  .agent-card-body { padding: 16px 20px 8px; }
@@ -155,7 +155,7 @@ img[data-agent]:hover { filter: brightness(1.15); }
155
155
  font-weight: 700;
156
156
  text-transform: uppercase;
157
157
  letter-spacing: 0.16em;
158
- color: var(--text-dim, #5C5A52);
158
+ color: var(--text-dim);
159
159
  margin-bottom: 8px;
160
160
  display: flex;
161
161
  align-items: center;
@@ -166,15 +166,15 @@ img[data-agent]:hover { filter: brightness(1.15); }
166
166
  display: inline-block;
167
167
  width: 5px;
168
168
  height: 5px;
169
- background: var(--lime, #6FB572);
169
+ background: var(--lime);
170
170
  }
171
171
  .agent-block-label .badge {
172
172
  margin-left: auto;
173
173
  font-size: 8px;
174
174
  letter-spacing: 0.12em;
175
- color: var(--text-faint, #3A382F);
175
+ color: var(--text-faint);
176
176
  font-weight: 600;
177
- border: 0.5px solid var(--line-bright, #2A2A26);
177
+ border: 0.5px solid var(--line-bright);
178
178
  padding: 1px 6px;
179
179
  }
180
180
 
@@ -182,7 +182,7 @@ img[data-agent]:hover { filter: brightness(1.15); }
182
182
  font-family: var(--sans);
183
183
  font-size: 13px;
184
184
  line-height: 1.55;
185
- color: var(--text-soft, #8E8B83);
185
+ color: var(--text-soft);
186
186
  letter-spacing: -0.003em;
187
187
  }
188
188
 
@@ -195,7 +195,7 @@ img[data-agent]:hover { filter: brightness(1.15); }
195
195
  gap: 8px;
196
196
  font-family: var(--mono);
197
197
  font-size: 12px;
198
- color: var(--text, #C8C5BE);
198
+ color: var(--text);
199
199
  letter-spacing: 0.02em;
200
200
  }
201
201
  .agent-model-name {
@@ -205,8 +205,8 @@ img[data-agent]:hover { filter: brightness(1.15); }
205
205
  font-size: 10px;
206
206
  letter-spacing: 0.16em;
207
207
  text-transform: uppercase;
208
- color: var(--text-soft, #8E8B83);
209
- border: 0.5px solid var(--line-bright, #2A2A26);
208
+ color: var(--text-soft);
209
+ border: 0.5px solid var(--line-bright);
210
210
  padding: 2px 7px;
211
211
  }
212
212
  .agent-model-provider:empty { display: none; }
@@ -217,13 +217,13 @@ img[data-agent]:hover { filter: brightness(1.15); }
217
217
  gap: 6px;
218
218
  }
219
219
  .agent-trait {
220
- border: 0.5px solid var(--line-bright, #2A2A26);
220
+ border: 0.5px solid var(--line-bright);
221
221
  padding: 3px 8px;
222
222
  font-size: 10px;
223
223
  font-family: var(--mono);
224
224
  text-transform: uppercase;
225
225
  letter-spacing: 0.1em;
226
- color: var(--text-soft, #8E8B83);
226
+ color: var(--text-soft);
227
227
  background: rgba(0, 0, 0, 0.2);
228
228
  }
229
229
 
@@ -236,8 +236,8 @@ img[data-agent]:hover { filter: brightness(1.15); }
236
236
  flex-direction: column;
237
237
  max-height: 240px;
238
238
  overflow-y: auto;
239
- border: 0.5px solid var(--line-bright, #2A2A26);
240
- background: var(--bg, #0E0E0D);
239
+ border: 0.5px solid var(--line-bright);
240
+ background: var(--bg);
241
241
  padding: 4px 10px;
242
242
  scrollbar-width: thin;
243
243
  scrollbar-color: transparent transparent;
@@ -245,7 +245,7 @@ img[data-agent]:hover { filter: brightness(1.15); }
245
245
  transition: scrollbar-color 0.18s;
246
246
  }
247
247
  .agent-memory-list:hover,
248
- .agent-memory-list.is-scrolling { scrollbar-color: var(--text-faint, #3A382F) transparent; }
248
+ .agent-memory-list.is-scrolling { scrollbar-color: var(--text-faint) transparent; }
249
249
  .agent-memory-list::-webkit-scrollbar { width: 6px; }
250
250
  .agent-memory-list::-webkit-scrollbar-track { background: transparent; }
251
251
  .agent-memory-list::-webkit-scrollbar-thumb {
@@ -254,8 +254,8 @@ img[data-agent]:hover { filter: brightness(1.15); }
254
254
  transition: background 0.18s;
255
255
  }
256
256
  .agent-memory-list:hover::-webkit-scrollbar-thumb,
257
- .agent-memory-list.is-scrolling::-webkit-scrollbar-thumb { background: var(--text-faint, #3A382F); }
258
- .agent-memory-list::-webkit-scrollbar-thumb:hover { background: var(--text-soft, #8E8B83); }
257
+ .agent-memory-list.is-scrolling::-webkit-scrollbar-thumb { background: var(--text-faint); }
258
+ .agent-memory-list::-webkit-scrollbar-thumb:hover { background: var(--text-soft); }
259
259
  .agent-note-entry {
260
260
  display: grid;
261
261
  grid-template-columns: 36px 1fr;
@@ -267,7 +267,7 @@ img[data-agent]:hover { filter: brightness(1.15); }
267
267
  .agent-note-time {
268
268
  font-family: var(--mono);
269
269
  font-size: 10px;
270
- color: var(--text-faint, #3A382F);
270
+ color: var(--text-faint);
271
271
  letter-spacing: 0.04em;
272
272
  padding-top: 3px;
273
273
  }
@@ -275,7 +275,7 @@ img[data-agent]:hover { filter: brightness(1.15); }
275
275
  font-family: var(--sans);
276
276
  font-size: 12px;
277
277
  line-height: 1.5;
278
- color: var(--text-soft, #8E8B83);
278
+ color: var(--text-soft);
279
279
  letter-spacing: -0.003em;
280
280
  }
281
281
  .agent-note-tag {
@@ -288,22 +288,22 @@ img[data-agent]:hover { filter: brightness(1.15); }
288
288
  padding: 1px 5px;
289
289
  margin-right: 6px;
290
290
  vertical-align: 1px;
291
- border: 0.5px solid var(--line-bright, #2A2A26);
292
- color: var(--text-dim, #5C5A52);
291
+ border: 0.5px solid var(--line-bright);
292
+ color: var(--text-dim);
293
293
  background: rgba(0, 0, 0, 0.2);
294
294
  }
295
- .agent-note-tag.t-obs { color: var(--text-dim, #5C5A52); border-color: var(--line-bright, #2A2A26); }
296
- .agent-note-tag.t-insight { color: var(--lime, #6FB572); border-color: var(--lime-deep, #2D5532); }
297
- .agent-note-tag.t-warn { color: var(--amber, #C99826); border-color: var(--amber-dim, #5A4519); }
298
- .agent-note-tag.t-open { color: var(--text-dim, #5C5A52); border-color: var(--line-bright, #2A2A26); }
299
- .agent-note-tag.t-soln { color: var(--lime, #6FB572); border-color: var(--lime, #6FB572); background: rgba(111, 181, 114, 0.10); }
300
- .agent-note-tag.t-crux { color: var(--amber, #C99826); border-color: var(--amber, #C99826); background: rgba(181, 149, 96, 0.10); }
301
- .agent-note-tag.t-origin { color: var(--text-dim, #5C5A52); border-color: var(--line-bright, #2A2A26); }
302
- .agent-note-entry.t-old .agent-note-body { color: var(--text-dim, #5C5A52); }
295
+ .agent-note-tag.t-obs { color: var(--text-dim); border-color: var(--line-bright); }
296
+ .agent-note-tag.t-insight { color: var(--lime); border-color: var(--lime-deep); }
297
+ .agent-note-tag.t-warn { color: var(--amber); border-color: var(--amber-dim); }
298
+ .agent-note-tag.t-open { color: var(--text-dim); border-color: var(--line-bright); }
299
+ .agent-note-tag.t-soln { color: var(--lime); border-color: var(--lime); background: rgba(111, 181, 114, 0.10); }
300
+ .agent-note-tag.t-crux { color: var(--amber); border-color: var(--amber); background: rgba(181, 149, 96, 0.10); }
301
+ .agent-note-tag.t-origin { color: var(--text-dim); border-color: var(--line-bright); }
302
+ .agent-note-entry.t-old .agent-note-body { color: var(--text-dim); }
303
303
  .agent-note-entry.t-old .agent-note-time { opacity: 0.55; }
304
304
  .agent-note-entry.t-fresh { background: linear-gradient(90deg, rgba(111, 181, 114, 0.06), transparent 60%); }
305
- .agent-note-entry.t-fresh .agent-note-body { color: var(--text, #C8C5BE); }
306
- .agent-note-entry.t-fresh .agent-note-time { color: var(--lime, #6FB572); }
305
+ .agent-note-entry.t-fresh .agent-note-body { color: var(--text); }
306
+ .agent-note-entry.t-fresh .agent-note-time { color: var(--lime); }
307
307
 
308
308
  .agent-memory-empty {
309
309
  display: flex;
@@ -316,14 +316,14 @@ img[data-agent]:hover { filter: brightness(1.15); }
316
316
  }
317
317
  .agent-memory-empty .lock-icon {
318
318
  font-size: 12px;
319
- color: var(--text-faint, #3A382F);
319
+ color: var(--text-faint);
320
320
  line-height: 1;
321
321
  }
322
322
  .agent-memory-empty .lock-text {
323
323
  font-family: var(--sans);
324
324
  font-size: 12px;
325
325
  line-height: 1.5;
326
- color: var(--text-soft, #8E8B83);
326
+ color: var(--text-soft);
327
327
  letter-spacing: -0.003em;
328
328
  max-width: 320px;
329
329
  }
@@ -332,18 +332,18 @@ img[data-agent]:hover { filter: brightness(1.15); }
332
332
  display: grid;
333
333
  grid-template-columns: repeat(3, 1fr);
334
334
  gap: 1px;
335
- background: var(--line-bright, #2A2A26);
336
- border: 0.5px solid var(--line-bright, #2A2A26);
335
+ background: var(--line-bright);
336
+ border: 0.5px solid var(--line-bright);
337
337
  }
338
338
  .agent-stat {
339
- background: var(--panel, #131312);
339
+ background: var(--panel);
340
340
  padding: 9px 10px;
341
341
  text-align: center;
342
342
  }
343
343
  .agent-stat .v {
344
344
  font-family: var(--mono);
345
345
  font-size: 18px;
346
- color: var(--lime, #6FB572);
346
+ color: var(--lime);
347
347
  font-weight: 700;
348
348
  letter-spacing: -0.01em;
349
349
  line-height: 1;
@@ -352,43 +352,43 @@ img[data-agent]:hover { filter: brightness(1.15); }
352
352
  font-size: 8px;
353
353
  text-transform: uppercase;
354
354
  letter-spacing: 0.14em;
355
- color: var(--text-faint, #3A382F);
355
+ color: var(--text-faint);
356
356
  margin-top: 4px;
357
357
  }
358
358
 
359
359
  .agent-card-foot {
360
- border-top: 0.5px solid var(--line-bright, #2A2A26);
360
+ border-top: 0.5px solid var(--line-bright);
361
361
  padding: 12px 20px;
362
362
  display: flex;
363
363
  justify-content: space-between;
364
364
  align-items: center;
365
- background: var(--panel-2, #1A1A18);
365
+ background: var(--panel-2);
366
366
  }
367
367
  .agent-card-foot .meta {
368
368
  font-family: var(--mono);
369
369
  font-size: 10px;
370
- color: var(--text-faint, #3A382F);
370
+ color: var(--text-faint);
371
371
  text-transform: uppercase;
372
372
  letter-spacing: 0.12em;
373
373
  }
374
- .agent-card-foot .meta .lime { color: var(--lime, #6FB572); }
374
+ .agent-card-foot .meta .lime { color: var(--lime); }
375
375
  .agent-card-cta {
376
376
  text-decoration: none;
377
- background: var(--lime, #6FB572);
378
- color: var(--bg, #0A0A0A);
377
+ background: var(--lime);
378
+ color: var(--bg);
379
379
  padding: 7px 12px;
380
380
  font-family: var(--mono);
381
381
  font-size: 10px;
382
382
  font-weight: 700;
383
383
  text-transform: uppercase;
384
384
  letter-spacing: 0.1em;
385
- border: 0.5px solid var(--lime, #6FB572);
385
+ border: 0.5px solid var(--lime);
386
386
  cursor: pointer;
387
387
  transition: all 0.12s;
388
388
  }
389
389
  .agent-card-cta:hover {
390
390
  background: transparent;
391
- color: var(--lime, #6FB572);
391
+ color: var(--lime);
392
392
  }
393
393
 
394
394
  /* Privacy mode: home / logged-out pages set body[data-agent-mode="public"]
@@ -403,23 +403,23 @@ img[data-agent]:hover { filter: brightness(1.15); }
403
403
  gap: 12px;
404
404
  align-items: center;
405
405
  padding: 12px 14px;
406
- border: 0.5px dashed var(--lime-dim, #2D5532);
406
+ border: 0.5px dashed var(--lime-dim);
407
407
  background: rgba(111, 181, 114, 0.04);
408
408
  }
409
409
  .agent-locked .lock-icon {
410
410
  font-size: 22px;
411
- color: var(--lime, #6FB572);
411
+ color: var(--lime);
412
412
  line-height: 1;
413
413
  }
414
414
  .agent-locked .lock-text {
415
415
  font-family: var(--sans);
416
416
  font-size: 12px;
417
417
  line-height: 1.55;
418
- color: var(--text-soft, #8E8B83);
418
+ color: var(--text-soft);
419
419
  letter-spacing: -0.003em;
420
420
  }
421
421
  .agent-locked .lock-link {
422
- color: var(--lime, #6FB572);
422
+ color: var(--lime);
423
423
  font-weight: 700;
424
424
  text-decoration: none;
425
425
  font-family: var(--mono);
@@ -430,8 +430,8 @@ img[data-agent]:hover { filter: brightness(1.15); }
430
430
  }
431
431
  .agent-locked .lock-link:hover { text-decoration: underline; }
432
432
  .agent-block-label .locked-badge {
433
- color: var(--text-faint, #3A382F);
434
- border-color: var(--lime-dim, #2D5532);
433
+ color: var(--text-faint);
434
+ border-color: var(--lime-dim);
435
435
  }
436
436
 
437
437
  @media (max-width: 600px) {