project-mgr 0.2.0 → 0.3.0

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.
@@ -0,0 +1 @@
1
+ export declare const WEB_UI_STYLES = " :root {\n --bg: #0d1117;\n --card-bg: #161b22;\n --border: #30363d;\n --text: #c9d1d9;\n --text-muted: #8b949e;\n --heading: #f0f6fc;\n --accent: #58a6ff;\n --accent-hover: #79c0ff;\n --success: #3fb950;\n --warning: #d29922;\n --danger: #f85149;\n --purple: #bc8cff;\n --cyan: #39c5cf;\n --radius: 8px;\n }\n\n * {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n }\n\n body {\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif;\n background-color: var(--bg);\n color: var(--text);\n line-height: 1.5;\n padding: 0;\n margin: 0;\n min-height: 100vh;\n }\n\n header {\n background-color: var(--card-bg);\n border-bottom: 1px solid var(--border);\n position: sticky;\n top: 0;\n z-index: 100;\n padding: 1rem 1.5rem;\n }\n\n .header-container {\n max-width: 1200px;\n margin: 0 auto;\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n gap: 1rem;\n }\n\n .brand {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n }\n\n .logo-icon {\n width: 32px;\n height: 32px;\n background: linear-gradient(135deg, var(--accent), var(--purple));\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: #fff;\n font-weight: bold;\n font-size: 1.1rem;\n }\n\n h1 {\n font-size: 1.25rem;\n font-weight: 600;\n color: var(--heading);\n }\n\n .header-right {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n flex-wrap: wrap;\n }\n\n .stats-bar {\n display: flex;\n gap: 0.75rem;\n flex-wrap: wrap;\n }\n\n .lang-switch {\n display: inline-flex;\n gap: 0.2rem;\n background: var(--bg);\n padding: 0.2rem;\n border-radius: 6px;\n border: 1px solid var(--border);\n }\n\n .lang-btn {\n background: transparent;\n border: none;\n color: var(--text-muted);\n padding: 0.25rem 0.65rem;\n font-size: 0.8rem;\n font-weight: 500;\n border-radius: 4px;\n cursor: pointer;\n transition: all 0.2s;\n }\n\n .lang-btn:hover {\n color: var(--heading);\n }\n\n .lang-btn.active {\n background: var(--accent);\n color: #ffffff;\n font-weight: 600;\n }\n\n .stat-pill {\n background: rgba(255, 255, 255, 0.05);\n border: 1px solid var(--border);\n border-radius: 20px;\n padding: 0.25rem 0.75rem;\n font-size: 0.85rem;\n display: flex;\n align-items: center;\n gap: 0.35rem;\n }\n\n .stat-val {\n font-weight: 600;\n color: var(--heading);\n }\n\n .controls {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n flex-wrap: wrap;\n width: 100%;\n max-width: 1200px;\n margin: 1rem auto 0 auto;\n padding: 0 1.5rem;\n }\n\n .search-box {\n flex: 1;\n min-width: 240px;\n position: relative;\n }\n\n .search-input {\n width: 100%;\n background: var(--card-bg);\n border: 1px solid var(--border);\n color: var(--text);\n padding: 0.5rem 0.75rem 0.5rem 2.25rem;\n border-radius: var(--radius);\n font-size: 0.9rem;\n outline: none;\n transition: border-color 0.2s;\n }\n\n .search-input:focus {\n border-color: var(--accent);\n }\n\n .search-icon {\n position: absolute;\n left: 0.75rem;\n top: 50%;\n transform: translateY(-50%);\n color: var(--text-muted);\n pointer-events: none;\n font-size: 0.85rem;\n }\n\n .nav-tabs {\n display: flex;\n gap: 0.5rem;\n background: var(--card-bg);\n padding: 0.25rem;\n border-radius: var(--radius);\n border: 1px solid var(--border);\n }\n\n .tab-btn {\n background: transparent;\n border: none;\n color: var(--text-muted);\n padding: 0.4rem 1rem;\n font-size: 0.875rem;\n font-weight: 500;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n }\n\n .tab-btn:hover {\n color: var(--heading);\n }\n\n .tab-btn.active {\n background: var(--accent);\n color: #ffffff;\n }\n\n .btn[hidden] { display: none !important; }\n .btn {\n background: var(--card-bg);\n border: 1px solid var(--border);\n color: var(--text);\n padding: 0.45rem 0.85rem;\n border-radius: var(--radius);\n font-size: 0.875rem;\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n gap: 0.35rem;\n transition: all 0.2s;\n }\n\n .btn:hover {\n border-color: var(--text-muted);\n color: var(--heading);\n }\n\n .btn-sm {\n padding: 0.3rem 0.6rem;\n font-size: 0.8rem;\n }\n\n .btn-primary {\n background: var(--accent);\n color: #ffffff;\n border-color: var(--accent);\n margin-top: 0.75rem;\n }\n\n .btn-primary:hover {\n background: var(--accent-hover);\n color: #ffffff;\n }\n\n main {\n max-width: 1200px;\n margin: 1.5rem auto;\n padding: 0 1.5rem;\n }\n\n .view-panel {\n display: none;\n }\n\n .view-panel.active {\n display: block;\n }\n\n /* Activity Feed Toolbar & Grouping Toggle */\n .activity-toolbar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 1rem;\n background: var(--card-bg);\n border: 1px solid var(--border);\n border-radius: var(--radius);\n padding: 0.75rem 1rem;\n margin-bottom: 1.25rem;\n flex-wrap: wrap;\n }\n\n .date-picker-wrapper {\n display: flex;\n align-items: center;\n gap: 0.6rem;\n font-size: 0.9rem;\n color: var(--heading);\n font-weight: 500;\n flex-wrap: wrap;\n }\n\n .date-input {\n background: var(--bg);\n border: 1px solid var(--border);\n color: var(--heading);\n padding: 0.35rem 0.65rem;\n border-radius: 6px;\n font-size: 0.875rem;\n outline: none;\n font-family: inherit;\n }\n\n .date-input:focus {\n border-color: var(--accent);\n }\n\n .view-mode-toggle {\n display: flex;\n gap: 0.25rem;\n background: var(--bg);\n padding: 0.2rem;\n border-radius: 6px;\n border: 1px solid var(--border);\n }\n\n .mode-btn {\n background: transparent;\n border: none;\n color: var(--text-muted);\n padding: 0.3rem 0.75rem;\n font-size: 0.8rem;\n font-weight: 500;\n border-radius: 4px;\n cursor: pointer;\n transition: all 0.2s;\n }\n\n .mode-btn:hover {\n color: var(--heading);\n }\n\n .mode-btn.active {\n background: var(--accent);\n color: #ffffff;\n font-weight: 600;\n }\n\n /* Project Grouping Container */\n .project-group-card {\n background: var(--card-bg);\n border: 1px solid var(--border);\n border-radius: var(--radius);\n padding: 1.25rem;\n margin-bottom: 1.25rem;\n }\n\n .project-group-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n border-bottom: 1px solid var(--border);\n padding-bottom: 0.75rem;\n margin-bottom: 1rem;\n }\n\n .project-group-title {\n display: flex;\n align-items: center;\n gap: 0.6rem;\n font-size: 1.1rem;\n font-weight: 600;\n color: var(--heading);\n }\n\n .project-group-count {\n font-size: 0.8rem;\n color: var(--text-muted);\n background: rgba(255, 255, 255, 0.06);\n padding: 0.15rem 0.55rem;\n border-radius: 12px;\n }\n\n /* Projects Grid */\n .projects-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(340px, 1fr));\n gap: 1.25rem;\n }\n\n .project-card {\n background: var(--card-bg);\n border: 1px solid var(--border);\n border-radius: var(--radius);\n padding: 1.25rem;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n transition: transform 0.15s, border-color 0.15s;\n }\n\n .project-card:hover {\n border-color: var(--text-muted);\n transform: translateY(-2px);\n }\n\n .card-header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 0.75rem;\n margin-bottom: 0.75rem;\n }\n\n .project-title {\n font-size: 1.1rem;\n font-weight: 600;\n color: var(--heading);\n }\n\n .project-slug {\n font-size: 0.8rem;\n color: var(--text-muted);\n font-family: monospace;\n }\n\n .completion-evidence { margin: 12px 0; line-height: 1.7; }\n details > summary { cursor: pointer; margin: 12px 0; }\n .status-badge {\n font-size: 0.75rem;\n font-weight: 600;\n text-transform: uppercase;\n padding: 0.2rem 0.55rem;\n border-radius: 12px;\n display: inline-block;\n white-space: nowrap;\n }\n\n .status-active { background: rgba(63, 185, 80, 0.15); color: var(--success); border: 1px solid rgba(63, 185, 80, 0.3); }\n .status-planned { background: rgba(88, 166, 255, 0.15); color: var(--accent); border: 1px solid rgba(88, 166, 255, 0.3); }\n .status-idea { background: rgba(188, 140, 255, 0.15); color: var(--purple); border: 1px solid rgba(188, 140, 255, 0.3); }\n .status-blocked { background: rgba(248, 81, 73, 0.15); color: var(--danger); border: 1px solid rgba(248, 81, 73, 0.3); }\n .status-paused { background: rgba(210, 153, 34, 0.15); color: var(--warning); border: 1px solid rgba(210, 153, 34, 0.3); }\n .status-completed { background: rgba(57, 197, 207, 0.15); color: var(--cyan); border: 1px solid rgba(57, 197, 207, 0.3); }\n .status-archived { background: rgba(139, 148, 158, 0.15); color: var(--text-muted); border: 1px solid rgba(139, 148, 158, 0.3); }\n\n .card-body {\n margin-bottom: 1rem;\n font-size: 0.9rem;\n }\n\n .card-description {\n color: var(--text);\n margin-bottom: 0.5rem;\n }\n\n .card-notes {\n color: var(--text-muted);\n font-size: 0.85rem;\n font-style: italic;\n border-left: 2px solid var(--border);\n padding-left: 0.5rem;\n margin-top: 0.5rem;\n }\n\n .latest-summary {\n background: rgba(0, 0, 0, 0.2);\n padding: 0.6rem;\n border-radius: 6px;\n margin-top: 0.75rem;\n font-size: 0.85rem;\n }\n\n .latest-summary-title {\n font-size: 0.75rem;\n color: var(--text-muted);\n text-transform: uppercase;\n margin-bottom: 0.25rem;\n }\n\n .card-footer {\n display: flex;\n align-items: center;\n justify-content: space-between;\n font-size: 0.85rem;\n color: var(--text-muted);\n border-top: 1px solid var(--border);\n padding-top: 0.75rem;\n margin-top: auto;\n }\n\n .link-btn {\n color: var(--accent);\n text-decoration: none;\n cursor: pointer;\n font-weight: 500;\n }\n\n .link-btn:hover {\n text-decoration: underline;\n }\n\n /* Timeline View */\n .timeline {\n display: flex;\n flex-direction: column;\n gap: 1rem;\n position: relative;\n }\n\n .timeline-item {\n background: var(--card-bg);\n border: 1px solid var(--border);\n border-radius: var(--radius);\n padding: 1.25rem;\n position: relative;\n }\n\n .timeline-header {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n gap: 0.5rem;\n margin-bottom: 0.75rem;\n }\n\n .timeline-meta {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n flex-wrap: wrap;\n }\n\n .project-tag {\n background: rgba(88, 166, 255, 0.1);\n color: var(--accent);\n border: 1px solid rgba(88, 166, 255, 0.2);\n padding: 0.15rem 0.5rem;\n border-radius: 4px;\n font-family: monospace;\n font-size: 0.85rem;\n cursor: pointer;\n }\n\n .time-stamp {\n font-size: 0.8rem;\n color: var(--text-muted);\n }\n\n .source-badge {\n font-size: 0.75rem;\n color: var(--text-muted);\n background: rgba(255, 255, 255, 0.05);\n padding: 0.1rem 0.4rem;\n border-radius: 4px;\n }\n\n .entry-summary {\n font-size: 1rem;\n font-weight: 500;\n color: var(--heading);\n margin-bottom: 0.5rem;\n }\n\n .entry-progress {\n font-size: 0.9rem;\n color: var(--text);\n margin-bottom: 0.75rem;\n }\n\n .section-box {\n margin-top: 0.5rem;\n font-size: 0.875rem;\n }\n\n .section-title {\n font-weight: 600;\n font-size: 0.8rem;\n text-transform: uppercase;\n margin-bottom: 0.25rem;\n display: flex;\n align-items: center;\n gap: 0.25rem;\n }\n\n .section-title.blockers { color: var(--danger); }\n .section-title.next-steps { color: var(--accent); }\n .section-title.decisions { color: var(--purple); }\n\n .bullet-list {\n list-style: disc inside;\n color: var(--text);\n padding-left: 0.25rem;\n }\n\n .bullet-list li {\n margin-bottom: 0.2rem;\n }\n\n .tags-container {\n display: flex;\n flex-wrap: wrap;\n gap: 0.35rem;\n margin-top: 0.75rem;\n }\n\n .pill-tag {\n background: rgba(255, 255, 255, 0.06);\n border: 1px solid var(--border);\n color: var(--text-muted);\n font-size: 0.75rem;\n padding: 0.1rem 0.45rem;\n border-radius: 12px;\n }\n\n .empty-state {\n text-align: center;\n padding: 3rem 1rem;\n color: var(--text-muted);\n }\n\n .empty-state h3 {\n color: var(--heading);\n margin-bottom: 0.5rem;\n }\n\n .filter-bar {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n margin-bottom: 1rem;\n font-size: 0.875rem;\n color: var(--text-muted);\n }\n\n .filter-chip {\n background: rgba(88, 166, 255, 0.15);\n color: var(--accent);\n padding: 0.2rem 0.6rem;\n border-radius: 12px;\n display: inline-flex;\n align-items: center;\n gap: 0.3rem;\n }\n\n .filter-chip button {\n background: none;\n border: none;\n color: var(--accent);\n cursor: pointer;\n font-weight: bold;\n }";
@@ -0,0 +1,636 @@
1
+ export const WEB_UI_STYLES = ` :root {
2
+ --bg: #0d1117;
3
+ --card-bg: #161b22;
4
+ --border: #30363d;
5
+ --text: #c9d1d9;
6
+ --text-muted: #8b949e;
7
+ --heading: #f0f6fc;
8
+ --accent: #58a6ff;
9
+ --accent-hover: #79c0ff;
10
+ --success: #3fb950;
11
+ --warning: #d29922;
12
+ --danger: #f85149;
13
+ --purple: #bc8cff;
14
+ --cyan: #39c5cf;
15
+ --radius: 8px;
16
+ }
17
+
18
+ * {
19
+ box-sizing: border-box;
20
+ margin: 0;
21
+ padding: 0;
22
+ }
23
+
24
+ body {
25
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
26
+ background-color: var(--bg);
27
+ color: var(--text);
28
+ line-height: 1.5;
29
+ padding: 0;
30
+ margin: 0;
31
+ min-height: 100vh;
32
+ }
33
+
34
+ header {
35
+ background-color: var(--card-bg);
36
+ border-bottom: 1px solid var(--border);
37
+ position: sticky;
38
+ top: 0;
39
+ z-index: 100;
40
+ padding: 1rem 1.5rem;
41
+ }
42
+
43
+ .header-container {
44
+ max-width: 1200px;
45
+ margin: 0 auto;
46
+ display: flex;
47
+ flex-wrap: wrap;
48
+ align-items: center;
49
+ justify-content: space-between;
50
+ gap: 1rem;
51
+ }
52
+
53
+ .brand {
54
+ display: flex;
55
+ align-items: center;
56
+ gap: 0.75rem;
57
+ }
58
+
59
+ .logo-icon {
60
+ width: 32px;
61
+ height: 32px;
62
+ background: linear-gradient(135deg, var(--accent), var(--purple));
63
+ border-radius: 8px;
64
+ display: flex;
65
+ align-items: center;
66
+ justify-content: center;
67
+ color: #fff;
68
+ font-weight: bold;
69
+ font-size: 1.1rem;
70
+ }
71
+
72
+ h1 {
73
+ font-size: 1.25rem;
74
+ font-weight: 600;
75
+ color: var(--heading);
76
+ }
77
+
78
+ .header-right {
79
+ display: flex;
80
+ align-items: center;
81
+ gap: 0.75rem;
82
+ flex-wrap: wrap;
83
+ }
84
+
85
+ .stats-bar {
86
+ display: flex;
87
+ gap: 0.75rem;
88
+ flex-wrap: wrap;
89
+ }
90
+
91
+ .lang-switch {
92
+ display: inline-flex;
93
+ gap: 0.2rem;
94
+ background: var(--bg);
95
+ padding: 0.2rem;
96
+ border-radius: 6px;
97
+ border: 1px solid var(--border);
98
+ }
99
+
100
+ .lang-btn {
101
+ background: transparent;
102
+ border: none;
103
+ color: var(--text-muted);
104
+ padding: 0.25rem 0.65rem;
105
+ font-size: 0.8rem;
106
+ font-weight: 500;
107
+ border-radius: 4px;
108
+ cursor: pointer;
109
+ transition: all 0.2s;
110
+ }
111
+
112
+ .lang-btn:hover {
113
+ color: var(--heading);
114
+ }
115
+
116
+ .lang-btn.active {
117
+ background: var(--accent);
118
+ color: #ffffff;
119
+ font-weight: 600;
120
+ }
121
+
122
+ .stat-pill {
123
+ background: rgba(255, 255, 255, 0.05);
124
+ border: 1px solid var(--border);
125
+ border-radius: 20px;
126
+ padding: 0.25rem 0.75rem;
127
+ font-size: 0.85rem;
128
+ display: flex;
129
+ align-items: center;
130
+ gap: 0.35rem;
131
+ }
132
+
133
+ .stat-val {
134
+ font-weight: 600;
135
+ color: var(--heading);
136
+ }
137
+
138
+ .controls {
139
+ display: flex;
140
+ align-items: center;
141
+ gap: 0.75rem;
142
+ flex-wrap: wrap;
143
+ width: 100%;
144
+ max-width: 1200px;
145
+ margin: 1rem auto 0 auto;
146
+ padding: 0 1.5rem;
147
+ }
148
+
149
+ .search-box {
150
+ flex: 1;
151
+ min-width: 240px;
152
+ position: relative;
153
+ }
154
+
155
+ .search-input {
156
+ width: 100%;
157
+ background: var(--card-bg);
158
+ border: 1px solid var(--border);
159
+ color: var(--text);
160
+ padding: 0.5rem 0.75rem 0.5rem 2.25rem;
161
+ border-radius: var(--radius);
162
+ font-size: 0.9rem;
163
+ outline: none;
164
+ transition: border-color 0.2s;
165
+ }
166
+
167
+ .search-input:focus {
168
+ border-color: var(--accent);
169
+ }
170
+
171
+ .search-icon {
172
+ position: absolute;
173
+ left: 0.75rem;
174
+ top: 50%;
175
+ transform: translateY(-50%);
176
+ color: var(--text-muted);
177
+ pointer-events: none;
178
+ font-size: 0.85rem;
179
+ }
180
+
181
+ .nav-tabs {
182
+ display: flex;
183
+ gap: 0.5rem;
184
+ background: var(--card-bg);
185
+ padding: 0.25rem;
186
+ border-radius: var(--radius);
187
+ border: 1px solid var(--border);
188
+ }
189
+
190
+ .tab-btn {
191
+ background: transparent;
192
+ border: none;
193
+ color: var(--text-muted);
194
+ padding: 0.4rem 1rem;
195
+ font-size: 0.875rem;
196
+ font-weight: 500;
197
+ border-radius: 6px;
198
+ cursor: pointer;
199
+ transition: all 0.2s;
200
+ }
201
+
202
+ .tab-btn:hover {
203
+ color: var(--heading);
204
+ }
205
+
206
+ .tab-btn.active {
207
+ background: var(--accent);
208
+ color: #ffffff;
209
+ }
210
+
211
+ .btn[hidden] { display: none !important; }
212
+ .btn {
213
+ background: var(--card-bg);
214
+ border: 1px solid var(--border);
215
+ color: var(--text);
216
+ padding: 0.45rem 0.85rem;
217
+ border-radius: var(--radius);
218
+ font-size: 0.875rem;
219
+ cursor: pointer;
220
+ display: inline-flex;
221
+ align-items: center;
222
+ gap: 0.35rem;
223
+ transition: all 0.2s;
224
+ }
225
+
226
+ .btn:hover {
227
+ border-color: var(--text-muted);
228
+ color: var(--heading);
229
+ }
230
+
231
+ .btn-sm {
232
+ padding: 0.3rem 0.6rem;
233
+ font-size: 0.8rem;
234
+ }
235
+
236
+ .btn-primary {
237
+ background: var(--accent);
238
+ color: #ffffff;
239
+ border-color: var(--accent);
240
+ margin-top: 0.75rem;
241
+ }
242
+
243
+ .btn-primary:hover {
244
+ background: var(--accent-hover);
245
+ color: #ffffff;
246
+ }
247
+
248
+ main {
249
+ max-width: 1200px;
250
+ margin: 1.5rem auto;
251
+ padding: 0 1.5rem;
252
+ }
253
+
254
+ .view-panel {
255
+ display: none;
256
+ }
257
+
258
+ .view-panel.active {
259
+ display: block;
260
+ }
261
+
262
+ /* Activity Feed Toolbar & Grouping Toggle */
263
+ .activity-toolbar {
264
+ display: flex;
265
+ align-items: center;
266
+ justify-content: space-between;
267
+ gap: 1rem;
268
+ background: var(--card-bg);
269
+ border: 1px solid var(--border);
270
+ border-radius: var(--radius);
271
+ padding: 0.75rem 1rem;
272
+ margin-bottom: 1.25rem;
273
+ flex-wrap: wrap;
274
+ }
275
+
276
+ .date-picker-wrapper {
277
+ display: flex;
278
+ align-items: center;
279
+ gap: 0.6rem;
280
+ font-size: 0.9rem;
281
+ color: var(--heading);
282
+ font-weight: 500;
283
+ flex-wrap: wrap;
284
+ }
285
+
286
+ .date-input {
287
+ background: var(--bg);
288
+ border: 1px solid var(--border);
289
+ color: var(--heading);
290
+ padding: 0.35rem 0.65rem;
291
+ border-radius: 6px;
292
+ font-size: 0.875rem;
293
+ outline: none;
294
+ font-family: inherit;
295
+ }
296
+
297
+ .date-input:focus {
298
+ border-color: var(--accent);
299
+ }
300
+
301
+ .view-mode-toggle {
302
+ display: flex;
303
+ gap: 0.25rem;
304
+ background: var(--bg);
305
+ padding: 0.2rem;
306
+ border-radius: 6px;
307
+ border: 1px solid var(--border);
308
+ }
309
+
310
+ .mode-btn {
311
+ background: transparent;
312
+ border: none;
313
+ color: var(--text-muted);
314
+ padding: 0.3rem 0.75rem;
315
+ font-size: 0.8rem;
316
+ font-weight: 500;
317
+ border-radius: 4px;
318
+ cursor: pointer;
319
+ transition: all 0.2s;
320
+ }
321
+
322
+ .mode-btn:hover {
323
+ color: var(--heading);
324
+ }
325
+
326
+ .mode-btn.active {
327
+ background: var(--accent);
328
+ color: #ffffff;
329
+ font-weight: 600;
330
+ }
331
+
332
+ /* Project Grouping Container */
333
+ .project-group-card {
334
+ background: var(--card-bg);
335
+ border: 1px solid var(--border);
336
+ border-radius: var(--radius);
337
+ padding: 1.25rem;
338
+ margin-bottom: 1.25rem;
339
+ }
340
+
341
+ .project-group-header {
342
+ display: flex;
343
+ align-items: center;
344
+ justify-content: space-between;
345
+ border-bottom: 1px solid var(--border);
346
+ padding-bottom: 0.75rem;
347
+ margin-bottom: 1rem;
348
+ }
349
+
350
+ .project-group-title {
351
+ display: flex;
352
+ align-items: center;
353
+ gap: 0.6rem;
354
+ font-size: 1.1rem;
355
+ font-weight: 600;
356
+ color: var(--heading);
357
+ }
358
+
359
+ .project-group-count {
360
+ font-size: 0.8rem;
361
+ color: var(--text-muted);
362
+ background: rgba(255, 255, 255, 0.06);
363
+ padding: 0.15rem 0.55rem;
364
+ border-radius: 12px;
365
+ }
366
+
367
+ /* Projects Grid */
368
+ .projects-grid {
369
+ display: grid;
370
+ grid-template-columns: repeat(auto-fill, minmax(340px, 1fr));
371
+ gap: 1.25rem;
372
+ }
373
+
374
+ .project-card {
375
+ background: var(--card-bg);
376
+ border: 1px solid var(--border);
377
+ border-radius: var(--radius);
378
+ padding: 1.25rem;
379
+ display: flex;
380
+ flex-direction: column;
381
+ justify-content: space-between;
382
+ transition: transform 0.15s, border-color 0.15s;
383
+ }
384
+
385
+ .project-card:hover {
386
+ border-color: var(--text-muted);
387
+ transform: translateY(-2px);
388
+ }
389
+
390
+ .card-header {
391
+ display: flex;
392
+ align-items: flex-start;
393
+ justify-content: space-between;
394
+ gap: 0.75rem;
395
+ margin-bottom: 0.75rem;
396
+ }
397
+
398
+ .project-title {
399
+ font-size: 1.1rem;
400
+ font-weight: 600;
401
+ color: var(--heading);
402
+ }
403
+
404
+ .project-slug {
405
+ font-size: 0.8rem;
406
+ color: var(--text-muted);
407
+ font-family: monospace;
408
+ }
409
+
410
+ .completion-evidence { margin: 12px 0; line-height: 1.7; }
411
+ details > summary { cursor: pointer; margin: 12px 0; }
412
+ .status-badge {
413
+ font-size: 0.75rem;
414
+ font-weight: 600;
415
+ text-transform: uppercase;
416
+ padding: 0.2rem 0.55rem;
417
+ border-radius: 12px;
418
+ display: inline-block;
419
+ white-space: nowrap;
420
+ }
421
+
422
+ .status-active { background: rgba(63, 185, 80, 0.15); color: var(--success); border: 1px solid rgba(63, 185, 80, 0.3); }
423
+ .status-planned { background: rgba(88, 166, 255, 0.15); color: var(--accent); border: 1px solid rgba(88, 166, 255, 0.3); }
424
+ .status-idea { background: rgba(188, 140, 255, 0.15); color: var(--purple); border: 1px solid rgba(188, 140, 255, 0.3); }
425
+ .status-blocked { background: rgba(248, 81, 73, 0.15); color: var(--danger); border: 1px solid rgba(248, 81, 73, 0.3); }
426
+ .status-paused { background: rgba(210, 153, 34, 0.15); color: var(--warning); border: 1px solid rgba(210, 153, 34, 0.3); }
427
+ .status-completed { background: rgba(57, 197, 207, 0.15); color: var(--cyan); border: 1px solid rgba(57, 197, 207, 0.3); }
428
+ .status-archived { background: rgba(139, 148, 158, 0.15); color: var(--text-muted); border: 1px solid rgba(139, 148, 158, 0.3); }
429
+
430
+ .card-body {
431
+ margin-bottom: 1rem;
432
+ font-size: 0.9rem;
433
+ }
434
+
435
+ .card-description {
436
+ color: var(--text);
437
+ margin-bottom: 0.5rem;
438
+ }
439
+
440
+ .card-notes {
441
+ color: var(--text-muted);
442
+ font-size: 0.85rem;
443
+ font-style: italic;
444
+ border-left: 2px solid var(--border);
445
+ padding-left: 0.5rem;
446
+ margin-top: 0.5rem;
447
+ }
448
+
449
+ .latest-summary {
450
+ background: rgba(0, 0, 0, 0.2);
451
+ padding: 0.6rem;
452
+ border-radius: 6px;
453
+ margin-top: 0.75rem;
454
+ font-size: 0.85rem;
455
+ }
456
+
457
+ .latest-summary-title {
458
+ font-size: 0.75rem;
459
+ color: var(--text-muted);
460
+ text-transform: uppercase;
461
+ margin-bottom: 0.25rem;
462
+ }
463
+
464
+ .card-footer {
465
+ display: flex;
466
+ align-items: center;
467
+ justify-content: space-between;
468
+ font-size: 0.85rem;
469
+ color: var(--text-muted);
470
+ border-top: 1px solid var(--border);
471
+ padding-top: 0.75rem;
472
+ margin-top: auto;
473
+ }
474
+
475
+ .link-btn {
476
+ color: var(--accent);
477
+ text-decoration: none;
478
+ cursor: pointer;
479
+ font-weight: 500;
480
+ }
481
+
482
+ .link-btn:hover {
483
+ text-decoration: underline;
484
+ }
485
+
486
+ /* Timeline View */
487
+ .timeline {
488
+ display: flex;
489
+ flex-direction: column;
490
+ gap: 1rem;
491
+ position: relative;
492
+ }
493
+
494
+ .timeline-item {
495
+ background: var(--card-bg);
496
+ border: 1px solid var(--border);
497
+ border-radius: var(--radius);
498
+ padding: 1.25rem;
499
+ position: relative;
500
+ }
501
+
502
+ .timeline-header {
503
+ display: flex;
504
+ flex-wrap: wrap;
505
+ align-items: center;
506
+ justify-content: space-between;
507
+ gap: 0.5rem;
508
+ margin-bottom: 0.75rem;
509
+ }
510
+
511
+ .timeline-meta {
512
+ display: flex;
513
+ align-items: center;
514
+ gap: 0.5rem;
515
+ flex-wrap: wrap;
516
+ }
517
+
518
+ .project-tag {
519
+ background: rgba(88, 166, 255, 0.1);
520
+ color: var(--accent);
521
+ border: 1px solid rgba(88, 166, 255, 0.2);
522
+ padding: 0.15rem 0.5rem;
523
+ border-radius: 4px;
524
+ font-family: monospace;
525
+ font-size: 0.85rem;
526
+ cursor: pointer;
527
+ }
528
+
529
+ .time-stamp {
530
+ font-size: 0.8rem;
531
+ color: var(--text-muted);
532
+ }
533
+
534
+ .source-badge {
535
+ font-size: 0.75rem;
536
+ color: var(--text-muted);
537
+ background: rgba(255, 255, 255, 0.05);
538
+ padding: 0.1rem 0.4rem;
539
+ border-radius: 4px;
540
+ }
541
+
542
+ .entry-summary {
543
+ font-size: 1rem;
544
+ font-weight: 500;
545
+ color: var(--heading);
546
+ margin-bottom: 0.5rem;
547
+ }
548
+
549
+ .entry-progress {
550
+ font-size: 0.9rem;
551
+ color: var(--text);
552
+ margin-bottom: 0.75rem;
553
+ }
554
+
555
+ .section-box {
556
+ margin-top: 0.5rem;
557
+ font-size: 0.875rem;
558
+ }
559
+
560
+ .section-title {
561
+ font-weight: 600;
562
+ font-size: 0.8rem;
563
+ text-transform: uppercase;
564
+ margin-bottom: 0.25rem;
565
+ display: flex;
566
+ align-items: center;
567
+ gap: 0.25rem;
568
+ }
569
+
570
+ .section-title.blockers { color: var(--danger); }
571
+ .section-title.next-steps { color: var(--accent); }
572
+ .section-title.decisions { color: var(--purple); }
573
+
574
+ .bullet-list {
575
+ list-style: disc inside;
576
+ color: var(--text);
577
+ padding-left: 0.25rem;
578
+ }
579
+
580
+ .bullet-list li {
581
+ margin-bottom: 0.2rem;
582
+ }
583
+
584
+ .tags-container {
585
+ display: flex;
586
+ flex-wrap: wrap;
587
+ gap: 0.35rem;
588
+ margin-top: 0.75rem;
589
+ }
590
+
591
+ .pill-tag {
592
+ background: rgba(255, 255, 255, 0.06);
593
+ border: 1px solid var(--border);
594
+ color: var(--text-muted);
595
+ font-size: 0.75rem;
596
+ padding: 0.1rem 0.45rem;
597
+ border-radius: 12px;
598
+ }
599
+
600
+ .empty-state {
601
+ text-align: center;
602
+ padding: 3rem 1rem;
603
+ color: var(--text-muted);
604
+ }
605
+
606
+ .empty-state h3 {
607
+ color: var(--heading);
608
+ margin-bottom: 0.5rem;
609
+ }
610
+
611
+ .filter-bar {
612
+ display: flex;
613
+ align-items: center;
614
+ gap: 0.5rem;
615
+ margin-bottom: 1rem;
616
+ font-size: 0.875rem;
617
+ color: var(--text-muted);
618
+ }
619
+
620
+ .filter-chip {
621
+ background: rgba(88, 166, 255, 0.15);
622
+ color: var(--accent);
623
+ padding: 0.2rem 0.6rem;
624
+ border-radius: 12px;
625
+ display: inline-flex;
626
+ align-items: center;
627
+ gap: 0.3rem;
628
+ }
629
+
630
+ .filter-chip button {
631
+ background: none;
632
+ border: none;
633
+ color: var(--accent);
634
+ cursor: pointer;
635
+ font-weight: bold;
636
+ }`;
package/dist/web/ui.d.ts CHANGED
@@ -1 +1,3 @@
1
- export declare function getWebUIHTML(): string;
1
+ import { type Locale } from "./i18n.js";
2
+ export type { I18nKey, Locale, LocaleMessages } from "./i18n.js";
3
+ export declare function getWebUIHTML(defaultLang?: Locale): string;