gabriel / musehub public
_activity.scss
343 lines 10.2 KB
Raw
sha256:9590cee1e0ccd6c76528f005b95d634d80f5019f0dcb7c371e149adc31d1fb65 refactor: enforce gRPC framing on all MWP wire traffic Sonnet 4.6 minor ⚠ breaking 156 days ago
1 // _activity.scss — Activity feed page (.av-* prefix)
2 // Covers: activity.html + fragments/activity_rows.html
3
4 // ── Page card ─────────────────────────────────────────────────────────────────
5 .av-page {
6 display: flex;
7 flex-direction: column;
8 gap: var(--space-4);
9 margin-top: var(--space-4);
10 }
11
12 .av-card {
13 background: var(--bg-surface);
14 border: 1px solid var(--border-default);
15 border-radius: var(--radius-md);
16 overflow: hidden;
17 }
18
19 // ── Stat strip ────────────────────────────────────────────────────────────────
20 .av-stat-strip {
21 display: flex;
22 align-items: stretch;
23 border-bottom: 1px solid var(--border-default);
24 }
25
26 .av-stat {
27 display: flex;
28 flex-direction: column;
29 align-items: center;
30 justify-content: center;
31 flex: 1;
32 padding: var(--space-4) var(--space-3);
33 gap: 3px;
34 }
35
36 .av-stat-sep {
37 width: 1px;
38 background: var(--border-default);
39 flex-shrink: 0;
40 }
41
42 .av-stat-value {
43 font-size: 20px;
44 font-weight: var(--font-weight-bold);
45 font-family: var(--font-mono);
46 color: var(--text-primary);
47 line-height: 1;
48 }
49 .av-stat-value--sm {
50 font-size: 13px;
51 font-family: var(--font-sans);
52 }
53
54 .av-stat-label {
55 font-size: 11px;
56 color: var(--text-muted);
57 text-transform: uppercase;
58 letter-spacing: 0.06em;
59 font-weight: var(--font-weight-medium);
60 }
61
62 // ── Filter toolbar ────────────────────────────────────────────────────────────
63 .av-filter-bar {
64 display: flex;
65 align-items: center;
66 border-bottom: 1px solid var(--border-subtle);
67 padding: 0 var(--space-4);
68 min-height: 46px;
69 gap: 0;
70 flex-wrap: wrap;
71 overflow-x: auto;
72 }
73
74 .av-pill {
75 display: inline-flex;
76 align-items: center;
77 gap: 5px;
78 padding: 12px 11px;
79 font-size: 12px;
80 color: var(--text-muted);
81 text-decoration: none;
82 border-bottom: 2px solid transparent;
83 white-space: nowrap;
84 transition: color var(--transition-fast), border-color var(--transition-fast);
85 flex-shrink: 0;
86
87 svg { opacity: 0.7; }
88
89 &:hover { color: var(--text-secondary); text-decoration: none; }
90
91 &.av-pill--active {
92 color: var(--text-primary);
93 border-bottom-color: var(--color-accent);
94 font-weight: var(--font-weight-semibold);
95 svg { opacity: 1; }
96 }
97 }
98
99 .av-pill-count {
100 background: var(--bg-overlay);
101 border: 1px solid var(--border-subtle);
102 border-radius: var(--radius-full);
103 font-size: 10px;
104 font-weight: var(--font-weight-semibold);
105 font-family: var(--font-mono);
106 padding: 1px 6px;
107 min-width: 18px;
108 text-align: center;
109 color: var(--text-muted);
110 }
111
112 .av-filter-count {
113 margin-left: auto;
114 font-size: 11px;
115 color: var(--text-muted);
116 font-family: var(--font-mono);
117 padding: 0 var(--space-2);
118 flex-shrink: 0;
119 }
120
121 // ── Date group header ─────────────────────────────────────────────────────────
122 .av-date-header {
123 display: flex;
124 align-items: center;
125 gap: var(--space-3);
126 padding: var(--space-2) var(--space-5);
127 font-size: 11px;
128 font-weight: var(--font-weight-bold);
129 text-transform: uppercase;
130 letter-spacing: 0.07em;
131 color: var(--text-muted);
132 background: var(--bg-overlay);
133 border-bottom: 1px solid var(--border-subtle);
134 border-top: 1px solid var(--border-subtle);
135
136 &:first-child { border-top: none; }
137 }
138
139 .av-date-line {
140 flex: 1;
141 height: 1px;
142 background: var(--border-subtle);
143 }
144
145 // ── Event row ─────────────────────────────────────────────────────────────────
146 .av-row {
147 display: flex;
148 align-items: flex-start;
149 gap: var(--space-3);
150 padding: var(--space-3) var(--space-5);
151 border-bottom: 1px solid var(--border-subtle);
152 transition: background var(--transition-fast), opacity 0.3s ease, transform 0.3s ease;
153
154 &:last-child { border-bottom: none; }
155 &:hover { background: var(--bg-overlay); }
156
157 // Entrance animation states
158 &.av-row--hidden { opacity: 0; transform: translateY(6px); }
159 &.av-row--visible { opacity: 1; transform: translateY(0); animation: av-fade-in 0.25s ease forwards; }
160 }
161
162 @keyframes av-fade-in {
163 from { opacity: 0; transform: translateY(6px); }
164 to { opacity: 1; transform: translateY(0); }
165 }
166
167 // Icon column with connector line
168 .av-row-icon-col {
169 display: flex;
170 flex-direction: column;
171 align-items: center;
172 flex-shrink: 0;
173 gap: 0;
174 }
175
176 .av-icon-badge {
177 width: 28px;
178 height: 28px;
179 border-radius: var(--radius-sm);
180 display: flex;
181 align-items: center;
182 justify-content: center;
183 flex-shrink: 0;
184 background: var(--bg-overlay);
185 border: 1px solid var(--border-subtle);
186 color: var(--text-muted);
187
188 // Per-type colors
189 &.av-type-commit_pushed { background: rgba(88,166,255,0.12); color: #58a6ff; border-color: rgba(88,166,255,0.25); }
190 &.av-type-proposal_opened { background: rgba(63,185,80,0.12); color: #3fb950; border-color: rgba(63,185,80,0.25); }
191 &.av-type-proposal_merged { background: rgba(163,113,247,0.12); color: #a371f7; border-color: rgba(163,113,247,0.25); }
192 &.av-type-proposal_closed { background: rgba(248,81,73,0.12); color: #f85149; border-color: rgba(248,81,73,0.25); }
193 &.av-type-issue_opened { background: rgba(240,136,62,0.12); color: #f0883e; border-color: rgba(240,136,62,0.25); }
194 &.av-type-issue_closed { background: rgba(63,185,80,0.12); color: #3fb950; border-color: rgba(63,185,80,0.25); }
195 &.av-type-branch_created { background: rgba(45,212,191,0.12); color: #2dd4bf; border-color: rgba(45,212,191,0.25); }
196 &.av-type-branch_deleted { background: rgba(248,81,73,0.08); color: #f85149; border-color: rgba(248,81,73,0.2); }
197 &.av-type-tag_pushed { background: rgba(227,179,65,0.12); color: #e3b341; border-color: rgba(227,179,65,0.25); }
198 &.av-type-session_started { background: rgba(163,113,247,0.12); color: #a371f7; border-color: rgba(163,113,247,0.25); }
199 &.av-type-session_ended { background: var(--bg-overlay); color: var(--text-muted); }
200 }
201
202 .av-row-connector {
203 width: 1px;
204 flex: 1;
205 min-height: 16px;
206 background: var(--border-subtle);
207 margin-top: 3px;
208 }
209
210 // Row body
211 .av-row-body {
212 flex: 1;
213 min-width: 0;
214 padding-top: 4px;
215 display: flex;
216 flex-direction: column;
217 gap: 5px;
218 }
219
220 .av-row-title {
221 font-size: 13px;
222 color: var(--text-primary);
223 font-weight: var(--font-weight-medium);
224 line-height: 1.4;
225 }
226
227 .av-row-meta {
228 display: flex;
229 align-items: center;
230 flex-wrap: wrap;
231 gap: 5px;
232 font-size: 11px;
233 color: var(--text-muted);
234 }
235
236 .av-actor-link {
237 display: inline-flex;
238 align-items: center;
239 gap: 4px;
240 color: var(--text-secondary);
241 text-decoration: none;
242 font-weight: var(--font-weight-medium);
243 &:hover { text-decoration: underline; color: var(--color-accent-link); }
244 }
245
246 .av-actor-avatar {
247 width: 16px;
248 height: 16px;
249 border-radius: 50%;
250 background: var(--color-accent);
251 color: #fff;
252 font-size: 8px;
253 font-weight: var(--font-weight-bold);
254 display: inline-flex;
255 align-items: center;
256 justify-content: center;
257 flex-shrink: 0;
258 }
259
260 .av-actor-link--agent .av-actor-avatar {
261 background: var(--color-accent-emphasis, #7c3aed);
262 border-radius: 3px;
263 }
264
265 .av-agent-badge {
266 display: inline-flex;
267 align-items: center;
268 gap: 3px;
269 font-size: 0.65rem;
270 font-weight: var(--font-weight-semibold);
271 letter-spacing: 0.04em;
272 text-transform: uppercase;
273 color: var(--color-accent-emphasis, #7c3aed);
274 background: color-mix(in srgb, var(--color-accent-emphasis, #7c3aed) 12%, transparent);
275 border: 1px solid color-mix(in srgb, var(--color-accent-emphasis, #7c3aed) 30%, transparent);
276 border-radius: 10px;
277 padding: 1px 5px;
278 svg { vertical-align: -1px; }
279 }
280
281 .av-type-label {
282 padding: 1px 6px;
283 border-radius: var(--radius-sm);
284 background: var(--bg-overlay);
285 border: 1px solid var(--border-subtle);
286 font-size: 10px;
287 font-weight: var(--font-weight-semibold);
288 color: var(--text-muted);
289 font-family: var(--font-mono);
290 text-transform: uppercase;
291 letter-spacing: 0.03em;
292 }
293
294 // Metadata chips
295 .av-chip {
296 display: inline-flex;
297 align-items: center;
298 gap: 3px;
299 padding: 1px 6px;
300 border-radius: var(--radius-sm);
301 font-size: 11px;
302 font-family: var(--font-mono);
303 text-decoration: none;
304 background: var(--bg-overlay);
305 border: 1px solid var(--border-subtle);
306 color: var(--text-muted);
307 transition: border-color var(--transition-fast), color var(--transition-fast);
308 }
309
310 a.av-chip:hover {
311 border-color: var(--color-accent);
312 color: var(--color-accent);
313 text-decoration: none;
314 }
315
316 .av-chip-commit { color: #58a6ff; border-color: rgba(88,166,255,0.3); }
317 .av-chip-branch { color: #2dd4bf; border-color: rgba(45,212,191,0.3); }
318 .av-chip-proposal { color: #a371f7; border-color: rgba(163,113,247,0.3); }
319 .av-chip-tag { color: #e3b341; border-color: rgba(227,179,65,0.3); }
320 .av-chip-session{ color: var(--text-muted); }
321
322 // ── Pagination wrapper ────────────────────────────────────────────────────────
323 .av-pagination {
324 padding: var(--space-3) var(--space-5);
325 border-top: 1px solid var(--border-subtle);
326 background: var(--bg-overlay);
327 }
328
329 // ── Empty state ───────────────────────────────────────────────────────────────
330 .av-empty {
331 display: flex;
332 flex-direction: column;
333 align-items: center;
334 justify-content: center;
335 padding: var(--space-12) var(--space-6);
336 text-align: center;
337 gap: var(--space-3);
338 }
339
340 .av-empty-icon { opacity: 0.3; }
341 .av-empty-title { font-size: 18px; font-weight: var(--font-weight-semibold); color: var(--text-secondary); }
342 .av-empty-desc { font-size: 14px; color: var(--text-muted); line-height: 1.6; }
343 .av-empty-link { font-size: 13px; color: var(--color-accent-link); text-decoration: none; &:hover { text-decoration: underline; } }
File History 1 commit
sha256:9590cee1e0ccd6c76528f005b95d634d80f5019f0dcb7c371e149adc31d1fb65 refactor: enforce gRPC framing on all MWP wire traffic Sonnet 4.6 minor ⚠ 156 days ago