gabriel / musehub public
_proposal-detail.scss
1,513 lines 45.4 KB
Raw
sha256:f99af7b1a7f36c4d537d1c630d4b71fc39222b1255f82e930929e2fc89015e11 fix: relax browse_repo perf budget to 500ms — 200ms was too… Sonnet 4.6 100 days ago
1 // ─────────────────────────────────────────────────────────────────────────────
2 // Component: Proposal detail (.prd-* + .proposal-* prefixes)
3 // File: src/scss/components/_proposal-detail.scss
4 //
5 // All visual rules — colors, typography, borders, backgrounds.
6 // Page layout lives in pages/_proposal-detail.scss.
7 // ─────────────────────────────────────────────────────────────────────────────
8
9 $proposal-open: var(--color-success);
10 $proposal-merged: var(--color-purple);
11 $proposal-closed: var(--text-muted);
12
13 $risk-low: var(--color-success);
14 $risk-medium: var(--color-warning);
15 $risk-high: var(--color-orange);
16 $risk-critical: var(--color-danger-critical);
17
18 // ── Hero ──────────────────────────────────────────────────────────────────────
19
20 .prd-hero {
21 position: relative;
22 background: linear-gradient(135deg, var(--bg-base) 0%, var(--bg-hero-mid) 60%, var(--bg-base) 100%);
23 border-bottom: 1px solid var(--border-default);
24 overflow: hidden;
25 }
26
27 .prd-hero-glow {
28 position: absolute;
29 inset: 0;
30 pointer-events: none;
31
32 &--open {
33 background:
34 radial-gradient(ellipse 55% 70% at 75% 40%, color-mix(in srgb, var(--color-accent) 8%, transparent) 0%, transparent 65%),
35 radial-gradient(ellipse 35% 50% at 15% 70%, color-mix(in srgb, var(--color-success) 5%, transparent) 0%, transparent 60%);
36 }
37 &--merged {
38 background:
39 radial-gradient(ellipse 55% 70% at 75% 40%, color-mix(in srgb, var(--color-purple) 10%, transparent) 0%, transparent 65%),
40 radial-gradient(ellipse 35% 50% at 15% 70%, color-mix(in srgb, var(--color-accent) 5%, transparent) 0%, transparent 60%);
41 }
42 &--closed {
43 background:
44 radial-gradient(ellipse 50% 60% at 70% 40%, color-mix(in srgb, var(--text-secondary) 6%, transparent) 0%, transparent 65%);
45 }
46 }
47
48 // ── Eyebrow ───────────────────────────────────────────────────────────────────
49
50 .prd-state-badge {
51 display: inline-flex;
52 align-items: center;
53 gap: 5px;
54 padding: 3px 10px;
55 border-radius: var(--radius-sm);
56 font-size: 11px;
57 font-weight: 600;
58 letter-spacing: 0.03em;
59 white-space: nowrap;
60
61 svg { flex-shrink: 0; }
62
63 &--open { background: color-mix(in srgb, var(--color-success) 12%, transparent); color: $proposal-open; border: 1px solid color-mix(in srgb, var(--color-success) 30%, transparent); svg { color: $proposal-open; } }
64 &--merged { background: color-mix(in srgb, var(--color-purple) 12%, transparent); color: $proposal-merged; border: 1px solid color-mix(in srgb, var(--color-purple) 30%, transparent); svg { color: $proposal-merged; } }
65 &--approved { background: color-mix(in srgb, var(--color-success) 18%, transparent); color: $proposal-open; border: 1px solid color-mix(in srgb, var(--color-success) 40%, transparent); svg { color: $proposal-open; } }
66 &--in_review { background: color-mix(in srgb, var(--color-accent) 12%, transparent); color: var(--color-accent); border: 1px solid color-mix(in srgb, var(--color-accent) 30%, transparent); svg { color: var(--color-accent); } }
67 &--settling { background: color-mix(in srgb, var(--color-warning) 12%, transparent); color: var(--color-warning); border: 1px solid color-mix(in srgb, var(--color-warning) 30%, transparent); svg { color: var(--color-warning); } }
68 &--drafting { background: color-mix(in srgb, var(--text-secondary) 10%, transparent); color: var(--text-muted); border: 1px solid color-mix(in srgb, var(--text-secondary) 25%, transparent); svg { color: var(--text-muted); } }
69 &--abandoned { background: color-mix(in srgb, var(--text-secondary) 10%, transparent); color: $proposal-closed; border: 1px solid color-mix(in srgb, var(--text-secondary) 25%, transparent); svg { color: $proposal-closed; } }
70 }
71
72 .prd-eyebrow {
73 display: flex;
74 align-items: center;
75 justify-content: space-between;
76 gap: 16px;
77 margin-bottom: 20px;
78 }
79
80 .prd-eyebrow-left {
81 display: flex;
82 align-items: center;
83 gap: 8px;
84 flex-shrink: 0;
85 }
86
87 .prd-eyebrow-right {
88 display: flex;
89 align-items: center;
90 gap: 6px;
91 font-size: 11px;
92 color: var(--text-muted);
93 }
94
95 .prd-meta-time { color: var(--text-muted); font-size: 11px; }
96
97 .prd-eyebrow-badge {
98 display: inline-flex;
99 align-items: center;
100 gap: 4px;
101 padding: 2px 8px;
102 border-radius: var(--radius-sm);
103 font-size: 11px;
104 font-weight: 600;
105 border: 1px solid transparent;
106
107 &--draft { color: var(--text-muted); border-color: var(--border-subtle); }
108 &--blocked { color: var(--color-danger); background: color-mix(in srgb, var(--color-danger) 8%, transparent); border-color: color-mix(in srgb, var(--color-danger) 30%, transparent); svg { color: var(--color-danger); } }
109 &--blocks { color: var(--color-warning); background: color-mix(in srgb, var(--color-warning) 8%, transparent); border-color: color-mix(in srgb, var(--color-warning) 30%, transparent); svg { color: var(--color-warning); } }
110 }
111
112 // ── Manifest (metadata grid below title) ──────────────────────────────────
113
114 .prd-manifest {
115 display: flex;
116 flex-direction: column;
117 gap: 5px;
118 margin-bottom: 0;
119 flex-shrink: 0;
120 width: 340px;
121 }
122
123 .prd-manifest-kvrow {
124 display: flex;
125 flex-direction: row;
126 justify-content: flex-end;
127 align-items: baseline;
128 gap: 12px;
129 font-size: 12px;
130 }
131
132 .prd-manifest-key {
133 font-size: 10px;
134 font-weight: 600;
135 letter-spacing: 0.06em;
136 text-transform: uppercase;
137 color: var(--text-muted);
138 width: 56px;
139 flex-shrink: 0;
140 text-align: left;
141
142 }
143
144
145 .prd-manifest-val {
146 color: var(--text-secondary);
147 }
148
149 .prd-manifest-anchor {
150 display: flex;
151 align-items: center;
152 min-width: 0;
153 }
154
155 .prd-anchor-hash {
156 font-family: var(--font-mono);
157 font-size: 10px;
158 color: var(--text-muted);
159 letter-spacing: 0.02em;
160 overflow: hidden;
161 text-overflow: ellipsis;
162 white-space: nowrap;
163 max-width: 480px;
164 text-decoration: none;
165 }
166 a.prd-anchor-hash:hover { color: var(--color-accent); }
167
168 .prd-anchor-empty {
169 font-size: 11px;
170 color: var(--text-muted);
171 opacity: 0.5;
172 font-style: italic;
173 }
174
175 .prd-sig-count {
176 display: inline-flex;
177 align-items: center;
178 gap: 8px;
179 font-size: 12px;
180
181 &-val {
182 font-variant-numeric: tabular-nums;
183 font-weight: 600;
184 }
185 &-label {
186 color: var(--text-muted);
187 font-size: 11px;
188 }
189 &-changes {
190 display: inline-flex;
191 align-items: center;
192 gap: 3px;
193 font-size: 11px;
194 color: var(--color-warning);
195 svg { color: var(--color-warning); }
196 }
197
198 &--met .prd-sig-count-val { color: var(--color-success); }
199 &--partial .prd-sig-count-val { color: var(--color-warning); }
200 &--none .prd-sig-count-val { color: var(--text-muted); }
201 }
202
203 .prd-branch-flow {
204 display: inline-flex;
205 align-items: center;
206 gap: 6px;
207 color: var(--text-muted);
208 font-size: 12px;
209 svg { opacity: 0.5; }
210 }
211
212 .prd-branch {
213 background: rgba(255,255,255,0.05);
214 border: 1px solid var(--border-subtle);
215 border-radius: var(--radius-sm);
216 padding: 2px 8px;
217 font-family: var(--font-mono);
218 font-size: 11px;
219 color: var(--color-accent);
220 text-decoration: none;
221 transition: border-color var(--transition-fast), background var(--transition-fast);
222
223 &:hover {
224 border-color: var(--border-default);
225 background: rgba(255,255,255,0.08);
226 color: var(--color-accent-emphasis, var(--color-accent));
227 }
228
229 &--to {
230 color: var(--text-secondary);
231 &:hover {
232 border-color: var(--border-default);
233 background: rgba(255,255,255,0.08);
234 color: var(--text-primary);
235 }
236 }
237 }
238
239 .prd-merge-sha {
240 font-family: var(--font-mono);
241 font-size: 11px;
242 color: var(--text-muted);
243 text-decoration: none;
244 &:hover { color: var(--color-accent); text-decoration: underline; }
245 }
246
247 // ── Title + meta ──────────────────────────────────────────────────────────────
248
249 .prd-hero-body {
250 display: flex;
251 gap: 48px;
252 align-items: flex-start;
253 }
254
255 .prd-hero-left {
256 flex: 1 1 0;
257 min-width: 0;
258 }
259
260 .prd-title {
261 font-size: clamp(20px, 3vw, 30px);
262 font-weight: 600;
263 line-height: 1.2;
264 color: var(--text-primary);
265 margin: 0 0 16px;
266 }
267
268 .prd-meta {
269 display: flex;
270 align-items: center;
271 gap: 8px;
272 font-size: 13px;
273 color: var(--text-muted);
274 flex-wrap: wrap;
275 margin-bottom: var(--space-3);
276 }
277
278 .prd-actor {
279 display: inline-flex;
280 align-items: center;
281 gap: 6px;
282 color: var(--text-primary);
283 font-weight: 500;
284 text-decoration: none;
285 &:hover { color: var(--color-accent); }
286 }
287
288 .prd-avatar {
289 width: 18px;
290 height: 18px;
291 border-radius: 50%;
292 overflow: hidden;
293 flex-shrink: 0;
294 display: inline-block;
295 vertical-align: middle;
296 }
297
298 .prd-meta-sep { color: var(--border-default); }
299
300 // ── Proposer signature block ───────────────────────────────────────────────────
301
302
303 // ── Description ───────────────────────────────────────────────────────────────
304
305 .prd-description {
306 font-size: 13px;
307 color: var(--text-secondary);
308 line-height: 1.65;
309 max-width: 680px;
310 margin-top: var(--space-3);
311
312 &--md {
313 white-space: normal;
314
315 h1, h2, h3, h4 {
316 color: var(--text-primary);
317 font-weight: 600;
318 margin: var(--space-4) 0 var(--space-2);
319 line-height: 1.3;
320 &:first-child { margin-top: 0; }
321 }
322 h1 { font-size: 16px; }
323 h2 { font-size: 14px; }
324 h3 { font-size: 13px; }
325
326 p { margin: 0 0 var(--space-3); &:last-child { margin-bottom: 0; } }
327
328 strong { color: var(--text-primary); font-weight: 600; }
329 em { font-style: italic; }
330
331 ul, ol { margin: 0 0 var(--space-3); padding-left: var(--space-5); &:last-child { margin-bottom: 0; } }
332 li { margin-bottom: 3px; }
333
334 code {
335 font-family: var(--font-mono);
336 font-size: 11px;
337 background: rgba(255,255,255,0.06);
338 border: 1px solid var(--border-subtle);
339 border-radius: var(--radius-sm);
340 padding: 1px 5px;
341 color: var(--text-primary);
342 }
343
344 pre {
345 background: var(--bg-overlay);
346 border: 1px solid var(--border-subtle);
347 border-radius: var(--radius-sm);
348 padding: var(--space-3);
349 overflow-x: auto;
350 margin: 0 0 var(--space-3);
351 code { background: none; border: none; padding: 0; font-size: 12px; }
352 }
353
354 a { color: var(--color-accent); text-decoration: none; &:hover { text-decoration: underline; } }
355
356 blockquote {
357 border-left: 2px solid var(--border-default);
358 padding-left: var(--space-3);
359 color: var(--text-muted);
360 margin: 0 0 var(--space-3);
361 }
362
363 hr { border: none; border-top: 1px solid var(--border-subtle); margin: var(--space-4) 0; }
364 }
365 }
366
367 // ── Stats strip ───────────────────────────────────────────────────────────────
368
369
370 // ── Notice ────────────────────────────────────────────────────────────────────
371
372 .prd-notice {
373 display: flex;
374 align-items: center;
375 gap: 8px;
376 padding: 9px 14px;
377 border-radius: var(--radius-sm);
378 font-size: 13px;
379 margin-bottom: var(--space-4);
380 border-left: 3px solid;
381 a { color: inherit; text-decoration: underline; opacity: 0.8; }
382
383 &--merged {
384 background: color-mix(in srgb, var(--color-purple) 8%, transparent);
385 border-color: $proposal-merged;
386 color: $proposal-merged;
387 }
388 &--closed {
389 background: color-mix(in srgb, var(--text-secondary) 7%, transparent);
390 border-color: $proposal-closed;
391 color: $proposal-closed;
392 }
393 }
394
395 // ── Sections ──────────────────────────────────────────────────────────────────
396
397 .proposal-section {
398 border-bottom: 1px solid var(--border-subtle);
399 margin-bottom: var(--space-5);
400 padding-bottom: var(--space-5);
401 &:last-child { border-bottom: none; margin-bottom: 0; }
402 &--merge { border-bottom: none; }
403 }
404
405 .proposal-section-hd {
406 display: flex;
407 align-items: center;
408 gap: 8px;
409 margin-bottom: var(--space-3);
410 }
411
412 .proposal-section-icon { color: var(--text-muted); flex-shrink: 0; }
413
414 .proposal-section-title {
415 font-size: 13px;
416 font-weight: 600;
417 color: var(--text-primary);
418 margin: 0;
419 letter-spacing: 0.01em;
420 }
421
422 .proposal-section-count {
423 font-family: var(--font-mono);
424 font-size: 11px;
425 color: var(--text-muted);
426 background: rgba(255,255,255,0.04);
427 border: 1px solid var(--border-subtle);
428 border-radius: var(--radius-sm);
429 padding: 1px 6px;
430 margin-left: auto;
431 }
432
433 .proposal-section-badge {
434 font-size: 11px;
435 font-weight: 600;
436 padding: 2px 8px;
437 border-radius: var(--radius-sm);
438 margin-left: auto;
439
440 &--success, &--passed { background: color-mix(in srgb, var(--color-success) 12%, transparent); color: var(--color-success); border: 1px solid color-mix(in srgb, var(--color-success) 25%, transparent); }
441 &--failure, &--failed { background: color-mix(in srgb, var(--color-danger) 10%, transparent); color: var(--color-danger); border: 1px solid color-mix(in srgb, var(--color-danger) 25%, transparent); }
442 &--running, &--pending { background: color-mix(in srgb, var(--color-accent) 10%, transparent); color: var(--color-accent); border: 1px solid color-mix(in srgb, var(--color-accent) 25%, transparent); }
443 &--skipped { background: color-mix(in srgb, var(--text-secondary) 8%, transparent); color: var(--text-muted); border: 1px solid color-mix(in srgb, var(--text-secondary) 20%, transparent); }
444 &--none { background: color-mix(in srgb, var(--text-secondary) 6%, transparent); color: var(--text-muted); border: 1px solid color-mix(in srgb, var(--text-secondary) 15%, transparent); }
445 }
446
447 .proposal-section-desc { font-size: 12px; color: var(--text-muted); line-height: 1.6; margin: 0 0 var(--space-3); }
448
449 // ── CI rows ───────────────────────────────────────────────────────────────────
450
451 .proposal-ci-row {
452 display: flex;
453 align-items: center;
454 gap: 10px;
455 padding: 7px 0;
456 border-bottom: 1px solid var(--border-subtle);
457 font-size: 13px;
458 &:last-child { border-bottom: none; }
459 }
460
461 .proposal-ci-dot {
462 width: 7px;
463 height: 7px;
464 border-radius: 50%;
465 flex-shrink: 0;
466 &--success, &--passed { background: var(--color-success); }
467 &--failure, &--failed { background: var(--color-danger); }
468 &--running, &--pending { background: var(--color-accent); box-shadow: 0 0 5px color-mix(in srgb, var(--color-accent) 50%, transparent); }
469 &--skipped { background: var(--text-muted); }
470 }
471
472 .proposal-ci-name { color: var(--text-primary); font-weight: 500; flex: 1; }
473 .proposal-ci-dur { font-family: var(--font-mono); font-size: 11px; color: var(--text-muted); }
474 .proposal-ci-state {
475 font-size: 11px; font-weight: 600; font-family: var(--font-mono);
476 &--success, &--passed { color: var(--color-success); }
477 &--failure, &--failed { color: var(--color-danger); }
478 &--running, &--pending { color: var(--color-accent); }
479 &--skipped { color: var(--text-muted); }
480 }
481 .proposal-ci-link {
482 font-size: 11px;
483 color: var(--color-accent);
484 text-decoration: none;
485 white-space: nowrap;
486 &:hover { text-decoration: underline; }
487 }
488
489 // ── Delta: ratio bar + file-grouped change map ────────────────────────────────
490
491 .prd-delta-ratio {
492 display: flex;
493 height: 6px;
494 border-radius: 3px;
495 overflow: hidden;
496 background: var(--bg-overlay);
497 margin-bottom: var(--space-2);
498 gap: 1px;
499 }
500
501 .prd-delta-ratio-seg {
502 height: 100%;
503 min-width: 3px;
504 transition: width 0.3s ease;
505 &--added { background: var(--color-success); }
506 &--modified { background: var(--color-warning); }
507 &--deleted { background: var(--color-danger); }
508 }
509
510 .prd-delta-legend {
511 display: flex;
512 gap: var(--space-4);
513 margin-bottom: var(--space-4);
514 }
515
516 .prd-delta-legend-item {
517 display: inline-flex;
518 align-items: center;
519 gap: 5px;
520 font-size: 11px;
521 color: var(--text-muted);
522
523 .prd-delta-legend-dot {
524 width: 6px;
525 height: 6px;
526 border-radius: 50%;
527 flex-shrink: 0;
528 }
529
530 &--added { .prd-delta-legend-dot { background: var(--color-success); } }
531 &--modified { .prd-delta-legend-dot { background: var(--color-warning); } }
532 &--deleted { .prd-delta-legend-dot { background: var(--color-danger); } }
533 }
534
535 .prd-delta-files {
536 display: flex;
537 flex-direction: column;
538 gap: var(--space-1);
539 }
540
541 .prd-delta-file {
542 border: 1px solid var(--border-subtle);
543 border-radius: var(--radius-sm);
544 overflow: hidden;
545 }
546
547 .prd-delta-file-hd {
548 display: flex;
549 align-items: center;
550 gap: 7px;
551 padding: 6px 10px;
552 background: var(--bg-elevated);
553 border-bottom: 1px solid var(--border-subtle);
554 cursor: default;
555 }
556
557 .prd-delta-file-icon { color: var(--text-muted); flex-shrink: 0; }
558
559 .prd-delta-file-path {
560 font-family: var(--font-mono);
561 font-size: 11px;
562 color: var(--text-secondary);
563 flex: 1;
564 min-width: 0;
565 overflow: hidden;
566 text-overflow: ellipsis;
567 white-space: nowrap;
568 }
569
570 .prd-delta-file-count {
571 font-family: var(--font-mono);
572 font-size: 10px;
573 color: var(--text-muted);
574 background: rgba(255,255,255,0.04);
575 border: 1px solid var(--border-subtle);
576 border-radius: var(--radius-sm);
577 padding: 0 5px;
578 line-height: 16px;
579 flex-shrink: 0;
580 }
581
582 .prd-delta-file-entries {
583 padding: var(--space-1) 0;
584 }
585
586 .prd-delta-entry {
587 display: flex;
588 align-items: center;
589 gap: 7px;
590 padding: 3px 10px;
591 font-size: 12px;
592 transition: background var(--transition-fast);
593
594 &:hover { background: rgba(255,255,255,0.025); }
595
596 &--added { border-left: 2px solid color-mix(in srgb, var(--color-success) 35%, transparent); }
597 &--modified { border-left: 2px solid color-mix(in srgb, var(--color-warning) 35%, transparent); }
598 &--deleted { border-left: 2px solid color-mix(in srgb, var(--color-danger) 30%, transparent); }
599 }
600
601 .prd-op-sigil {
602 font-family: var(--font-mono);
603 font-size: 11px;
604 font-weight: 700;
605 width: 16px;
606 height: 16px;
607 display: inline-flex;
608 align-items: center;
609 justify-content: center;
610 border-radius: var(--radius-sm);
611 flex-shrink: 0;
612 line-height: 1;
613
614 &--added { color: var(--color-success); background: color-mix(in srgb, var(--color-success) 10%, transparent); }
615 &--modified { color: var(--color-warning); background: color-mix(in srgb, var(--color-warning) 10%, transparent); }
616 &--deleted { color: var(--color-danger); background: color-mix(in srgb, var(--color-danger) 10%, transparent); }
617 }
618
619 .prd-delta-sym-name {
620 font-family: var(--font-mono);
621 font-size: 12px;
622 color: var(--text-primary);
623 text-decoration: none;
624 flex: 1;
625 min-width: 0;
626 overflow: hidden;
627 text-overflow: ellipsis;
628 white-space: nowrap;
629 &:hover { color: var(--color-accent-link); text-decoration: underline; }
630 }
631
632 .prd-breaking {
633 display: inline-flex;
634 align-items: center;
635 gap: 3px;
636 font-size: 10px;
637 font-weight: 600;
638 color: var(--color-danger);
639 background: color-mix(in srgb, var(--color-danger) 8%, transparent);
640 border: 1px solid color-mix(in srgb, var(--color-danger) 25%, transparent);
641 border-radius: var(--radius-sm);
642 padding: 1px 5px;
643 flex-shrink: 0;
644 white-space: nowrap;
645 svg { flex-shrink: 0; }
646 }
647
648 .prd-delta-empty {
649 font-size: 12px;
650 color: var(--text-muted);
651 font-style: italic;
652 padding: var(--space-3) 0;
653 }
654
655 // ── Symbol delta (legacy JS-populated columns — kept for non-SSR fallback) ────
656
657 .proposal-sym-group { flex: 1; min-width: 140px; min-width: 0; overflow: hidden; }
658
659 .proposal-sym-group-hd {
660 display: flex;
661 align-items: center;
662 gap: 5px;
663 font-size: 11px;
664 font-weight: 600;
665 text-transform: uppercase;
666 letter-spacing: 0.06em;
667 margin-bottom: var(--space-2);
668 padding-bottom: 6px;
669 border-bottom: 1px solid var(--border-subtle);
670
671 svg { flex-shrink: 0; }
672
673 &--add { color: var(--color-success); }
674 &--mod { color: var(--color-warning); }
675 &--del { color: var(--color-danger); }
676 }
677
678 .proposal-sym-count { font-family: var(--font-mono); font-size: 10px; opacity: 0.7; }
679
680 .proposal-sym-group-row {
681 border-left: 2px solid var(--border-subtle);
682 margin-bottom: 8px;
683 padding-left: 8px;
684 &--add { border-left-color: color-mix(in srgb, var(--color-success) 40%, transparent); }
685 &--mod { border-left-color: color-mix(in srgb, var(--color-warning) 40%, transparent); }
686 &--del { border-left-color: color-mix(in srgb, var(--color-danger) 35%, transparent); }
687 &:last-child { margin-bottom: 0; }
688 }
689
690 .proposal-sym-file-hd {
691 display: flex;
692 align-items: center;
693 gap: 7px;
694 padding: 3px 0 4px;
695 }
696
697 .proposal-sym-file-name {
698 font-family: var(--font-mono);
699 font-size: 11px;
700 color: var(--text-secondary);
701 white-space: nowrap;
702 overflow: hidden;
703 text-overflow: ellipsis;
704 flex: 1;
705 min-width: 0;
706 }
707
708 .proposal-sym-file-badge {
709 font-family: var(--font-mono);
710 font-size: 10px;
711 color: var(--text-muted);
712 background: rgba(255,255,255,0.04);
713 border: 1px solid var(--border-subtle);
714 border-radius: var(--radius-sm);
715 padding: 0 5px;
716 flex-shrink: 0;
717 line-height: 16px;
718 }
719
720 .proposal-sym-items { padding-bottom: 2px; }
721
722 .proposal-sym-item {
723 display: flex;
724 align-items: center;
725 gap: 0.3rem;
726 }
727
728 .proposal-sym-item-name {
729 font-family: var(--font-mono);
730 font-size: 11px;
731 background: transparent;
732 border: none;
733 padding: 0;
734 white-space: nowrap;
735 overflow: hidden;
736 text-overflow: ellipsis;
737 display: block;
738 &--add { color: color-mix(in srgb, var(--color-success) 75%, transparent); }
739 &--mod { color: color-mix(in srgb, var(--color-warning) 75%, transparent); }
740 &--del { color: color-mix(in srgb, var(--color-danger) 70%, transparent); }
741 }
742
743 .proposal-sym-ipager {
744 display: flex;
745 align-items: center;
746 gap: 1px;
747 padding: 3px 0 2px;
748 margin-top: 2px;
749 border-top: 1px solid var(--border-subtle);
750 }
751
752 .proposal-sym-ipager-btn {
753 display: inline-flex;
754 align-items: center;
755 justify-content: center;
756 width: 18px;
757 height: 18px;
758 border-radius: var(--radius-sm);
759 border: 1px solid transparent;
760 background: transparent;
761 color: var(--text-muted);
762 cursor: pointer;
763 flex-shrink: 0;
764 transition: background var(--transition-fast), color var(--transition-fast);
765 svg { display: block; }
766 &:hover:not(:disabled) { background: rgba(255,255,255,0.06); border-color: var(--border-subtle); color: var(--text-secondary); }
767 &:disabled { opacity: 0.2; cursor: not-allowed; }
768 }
769
770 .proposal-sym-ipager-info {
771 flex: 1;
772 text-align: center;
773 font-family: var(--font-mono);
774 font-size: 9px;
775 color: var(--text-secondary);
776 white-space: nowrap;
777 }
778
779 .proposal-sym-pager { margin-top: 6px; }
780
781 .proposal-sym-pager-inner {
782 display: flex;
783 align-items: center;
784 gap: 2px;
785 padding-top: 7px;
786 border-top: 1px solid var(--border-subtle);
787 }
788
789 .proposal-sym-pager-btn {
790 display: inline-flex;
791 align-items: center;
792 justify-content: center;
793 width: 22px;
794 height: 22px;
795 border-radius: var(--radius-sm);
796 border: 1px solid transparent;
797 background: transparent;
798 color: var(--text-muted);
799 cursor: pointer;
800 flex-shrink: 0;
801 transition: background var(--transition-fast), border-color var(--transition-fast), color var(--transition-fast);
802 svg { display: block; }
803 &:hover:not(:disabled) { background: rgba(255,255,255,0.06); border-color: var(--border-subtle); color: var(--text-primary); }
804 &:disabled { opacity: 0.25; cursor: not-allowed; }
805 }
806
807 .proposal-sym-pager-info { flex: 1; text-align: center; font-family: var(--font-mono); font-size: 10px; color: var(--text-primary); white-space: nowrap; }
808 .proposal-sym-pager-of { color: var(--text-muted); }
809
810 .proposal-breaking {
811 margin-top: var(--space-3);
812 padding: var(--space-3);
813 background: color-mix(in srgb, var(--color-danger) 6%, transparent);
814 border: 1px solid color-mix(in srgb, var(--color-danger) 20%, transparent);
815 border-left: 3px solid var(--color-danger);
816 border-radius: var(--radius-sm);
817 }
818
819 .proposal-breaking-hd {
820 display: flex;
821 align-items: center;
822 gap: 6px;
823 font-size: 11px;
824 font-weight: 600;
825 color: var(--color-danger);
826 text-transform: uppercase;
827 letter-spacing: 0.06em;
828 margin-bottom: var(--space-2);
829 }
830
831 .proposal-breaking-item {
832 font-size: 12px;
833 padding: 2px 0;
834 overflow: hidden;
835 color: var(--text-secondary);
836 code {
837 display: block;
838 font-family: var(--font-mono);
839 font-size: 11px;
840 color: var(--color-danger);
841 white-space: nowrap;
842 overflow: hidden;
843 text-overflow: ellipsis;
844 }
845 }
846
847 // ── Files changed ─────────────────────────────────────────────────────────────
848
849 .proposal-file-row {
850 display: flex;
851 align-items: center;
852 gap: 10px;
853 padding: 5px 0;
854 border-bottom: 1px solid var(--border-subtle);
855 font-size: 12px;
856 &:last-child { border-bottom: none; }
857 }
858
859 .proposal-file-sigil {
860 width: 16px;
861 height: 16px;
862 border-radius: var(--radius-sm);
863 display: inline-flex;
864 align-items: center;
865 justify-content: center;
866 font-size: 10px;
867 font-weight: 700;
868 flex-shrink: 0;
869 font-family: var(--font-mono);
870
871 .proposal-file-row--add & { background: color-mix(in srgb, var(--color-success) 15%, transparent); color: var(--color-success); border: 1px solid color-mix(in srgb, var(--color-success) 25%, transparent); }
872 .proposal-file-row--mod & { background: color-mix(in srgb, var(--color-warning) 12%, transparent); color: var(--color-warning); border: 1px solid color-mix(in srgb, var(--color-warning) 25%, transparent); }
873 .proposal-file-row--del & { background: color-mix(in srgb, var(--color-danger) 10%, transparent); color: var(--color-danger); border: 1px solid color-mix(in srgb, var(--color-danger) 25%, transparent); }
874 }
875
876 .proposal-file-name {
877 font-family: var(--font-mono);
878 font-size: 12px;
879 color: var(--text-secondary);
880 flex: 1;
881 overflow: hidden;
882 text-overflow: ellipsis;
883 white-space: nowrap;
884 }
885
886 // ── Commits ───────────────────────────────────────────────────────────────────
887
888 .proposal-commit-row {
889 display: flex;
890 align-items: flex-start;
891 gap: var(--space-3);
892 padding: 8px 0;
893 border-bottom: 1px solid var(--border-subtle);
894 &:last-child { border-bottom: none; }
895 }
896
897 .proposal-commit-left {
898 display: flex;
899 align-items: center;
900 gap: 5px;
901 flex-shrink: 0;
902 min-width: 64px;
903 }
904
905 .proposal-commit-type {
906 font-size: 10px;
907 font-weight: 600;
908 font-family: var(--font-mono);
909 padding: 1px 6px;
910 border-radius: var(--radius-sm);
911 text-transform: lowercase;
912 border: 1px solid;
913
914 &--feat { color: var(--color-success); border-color: color-mix(in srgb, var(--color-success) 30%, transparent); background: color-mix(in srgb, var(--color-success) 8%, transparent); }
915 &--fix { color: var(--color-danger); border-color: color-mix(in srgb, var(--color-danger) 30%, transparent); background: color-mix(in srgb, var(--color-danger) 8%, transparent); }
916 &--chore { color: var(--text-muted); border-color: color-mix(in srgb, var(--text-secondary) 30%, transparent); background: color-mix(in srgb, var(--text-secondary) 6%, transparent); }
917 &--docs { color: var(--color-accent); border-color: color-mix(in srgb, var(--color-accent) 30%, transparent); background: color-mix(in srgb, var(--color-accent) 8%, transparent); }
918 &--test { color: var(--color-purple); border-color: color-mix(in srgb, var(--color-purple) 30%, transparent); background: color-mix(in srgb, var(--color-purple) 8%, transparent); }
919 &--refactor,
920 &--style { color: var(--color-warning); border-color: color-mix(in srgb, var(--color-warning) 30%, transparent); background: color-mix(in srgb, var(--color-warning) 8%, transparent); }
921 }
922
923 .proposal-agent-badge {
924 font-size: 9px;
925 font-weight: 600;
926 padding: 1px 5px;
927 border-radius: var(--radius-sm);
928 color: var(--agent-accent);
929 background: var(--agent-accent-bg);
930 border: 1px solid color-mix(in srgb, var(--color-purple) 30%, transparent);
931 text-transform: uppercase;
932 letter-spacing: 0.04em;
933 }
934
935 .proposal-commit-center { flex: 1; min-width: 0; }
936
937 .proposal-commit-message {
938 font-size: 13px;
939 color: var(--text-primary);
940 white-space: nowrap;
941 overflow: hidden;
942 text-overflow: ellipsis;
943 line-height: 1.4;
944 }
945
946 .proposal-commit-meta {
947 font-size: 11px;
948 color: var(--text-muted);
949 display: flex;
950 gap: 6px;
951 margin-top: 2px;
952 }
953
954 .proposal-commit-sep { color: var(--border-default); }
955
956 .proposal-commit-right {
957 display: flex;
958 align-items: center;
959 gap: 8px;
960 flex-shrink: 0;
961 }
962
963 .proposal-commit-semver {
964 font-size: 9px;
965 font-weight: 700;
966 padding: 1px 6px;
967 border-radius: var(--radius-sm);
968 text-transform: uppercase;
969 letter-spacing: 0.05em;
970 border: 1px solid;
971
972 &--major { color: var(--color-danger); border-color: color-mix(in srgb, var(--color-danger) 35%, transparent); background: color-mix(in srgb, var(--color-danger) 10%, transparent); }
973 &--minor { color: var(--color-warning); border-color: color-mix(in srgb, var(--color-warning) 35%, transparent); background: color-mix(in srgb, var(--color-warning) 10%, transparent); }
974 &--patch { color: var(--color-success); border-color: color-mix(in srgb, var(--color-success) 35%, transparent); background: color-mix(in srgb, var(--color-success) 10%, transparent); }
975 }
976
977 .proposal-commit-sha {
978 font-family: var(--font-mono);
979 font-size: 11px;
980 color: var(--text-muted);
981 text-decoration: none;
982 &:hover { color: var(--color-accent); text-decoration: underline; }
983 }
984
985 // ── Divergence analysis ───────────────────────────────────────────────────────
986
987 .proposal-div-ring { flex-shrink: 0; svg { display: block; } }
988 .proposal-div-summary { flex: 1; }
989
990 .proposal-div-pct {
991 font-size: 18px;
992 font-weight: 700;
993 font-family: var(--font-mono);
994 color: var(--text-primary);
995 line-height: 1.2;
996 }
997
998 .proposal-div-desc { font-size: 12px; color: var(--text-muted); margin-top: 2px; }
999
1000 .proposal-div-ancestor {
1001 display: block;
1002 font-family: var(--font-mono);
1003 font-size: 11px;
1004 color: var(--text-muted);
1005 text-decoration: none;
1006 margin-top: 4px;
1007 &:hover { color: var(--color-accent); }
1008 }
1009
1010 .proposal-section-chips { display: flex; flex-wrap: wrap; gap: 6px; }
1011
1012 .proposal-section-chip {
1013 font-size: 11px;
1014 font-family: var(--font-mono);
1015 padding: 2px 8px;
1016 background: rgba(255,255,255,0.04);
1017 border: 1px solid var(--border-subtle);
1018 border-radius: var(--radius-sm);
1019 color: var(--text-muted);
1020 }
1021
1022 // ── CLI hint (comment + merge) ────────────────────────────────────────────────
1023
1024 .proposal-cli-hint {
1025 display: flex;
1026 align-items: center;
1027 gap: var(--space-2);
1028 padding: var(--space-3) var(--space-4);
1029 background: var(--bg-elevated);
1030 border: 1px solid var(--border-subtle);
1031 border-radius: var(--radius-sm);
1032 font-size: 13px;
1033 color: var(--text-secondary);
1034 margin-top: var(--space-3);
1035
1036 .proposal-cli-hint-icon {
1037 flex-shrink: 0;
1038 opacity: 0.6;
1039 }
1040 }
1041
1042 .proposal-cli-cmd {
1043 display: inline-block;
1044 padding: 1px 7px;
1045 background: var(--bg-void);
1046 border: 1px solid var(--border-default);
1047 border-radius: var(--radius-xs, 4px);
1048 font-size: 12px;
1049 font-family: var(--font-mono);
1050 color: var(--color-accent);
1051 white-space: nowrap;
1052 overflow-x: auto;
1053 }
1054
1055 // ── CLI merge strategies ──────────────────────────────────────────────────────
1056
1057 .proposal-cli-strategies {
1058 display: flex;
1059 flex-direction: column;
1060 gap: var(--space-2);
1061 margin-top: var(--space-4);
1062 }
1063
1064 .proposal-cli-strategy {
1065 display: flex;
1066 flex-direction: column;
1067 gap: var(--space-1);
1068 padding: var(--space-3) var(--space-4);
1069 background: var(--bg-elevated);
1070 border: 1px solid var(--border-subtle);
1071 border-radius: var(--radius-sm);
1072
1073 &-label {
1074 display: flex;
1075 align-items: center;
1076 gap: 6px;
1077 font-size: 13px;
1078 font-weight: 500;
1079 color: var(--text-secondary);
1080 margin-bottom: 2px;
1081 }
1082 }
1083
1084 // ── Sidebar ───────────────────────────────────────────────────────────────────
1085
1086 .proposal-scard {
1087 border-bottom: 1px solid var(--border-subtle);
1088 padding: var(--space-4) 0;
1089 &:first-child { padding-top: 0; }
1090 &:last-child { border-bottom: none; }
1091 }
1092
1093 .proposal-scard-hd {
1094 font-size: 11px;
1095 font-weight: 600;
1096 text-transform: uppercase;
1097 letter-spacing: 0.08em;
1098 color: var(--text-muted);
1099 margin-bottom: var(--space-2);
1100 }
1101
1102 .proposal-scard-label {
1103 font-size: 11px;
1104 color: var(--text-muted);
1105 margin-bottom: 3px;
1106 margin-top: var(--space-2);
1107 &:first-child { margin-top: 0; }
1108 }
1109
1110 .proposal-scard-desc { font-size: 11px; color: var(--text-muted); line-height: 1.5; margin: var(--space-2) 0 0; }
1111 .proposal-scard-empty { font-size: 12px; color: var(--text-muted); font-style: italic; margin: 0; }
1112
1113 .proposal-state-pill {
1114 display: inline-flex;
1115 align-items: center;
1116 gap: 5px;
1117 padding: 3px 10px;
1118 border-radius: var(--radius-sm);
1119 font-size: 12px;
1120 font-weight: 600;
1121 border: 1px solid;
1122
1123 &--open { background: color-mix(in srgb, var(--color-success) 10%, transparent); color: $proposal-open; border-color: color-mix(in srgb, var(--color-success) 25%, transparent); }
1124 &--merged { background: color-mix(in srgb, var(--color-purple) 10%, transparent); color: $proposal-merged; border-color: color-mix(in srgb, var(--color-purple) 25%, transparent); }
1125 &--closed { background: color-mix(in srgb, var(--text-secondary) 8%, transparent); color: $proposal-closed; border-color: color-mix(in srgb, var(--text-secondary) 20%, transparent); }
1126 &--wide { width: 100%; justify-content: center; }
1127 }
1128
1129 .proposal-scard-semver {
1130 display: flex;
1131 align-items: center;
1132 gap: 6px;
1133 font-size: 12px;
1134 font-weight: 600;
1135 padding: 6px 10px;
1136 border-radius: var(--radius-sm);
1137 border: 1px solid;
1138
1139 svg { flex-shrink: 0; }
1140
1141 &--major { background: color-mix(in srgb, var(--color-danger) 8%, transparent); color: var(--color-danger); border-color: color-mix(in srgb, var(--color-danger) 25%, transparent); }
1142 &--minor { background: color-mix(in srgb, var(--color-warning) 8%, transparent); color: var(--color-warning); border-color: color-mix(in srgb, var(--color-warning) 25%, transparent); }
1143 &--patch { background: color-mix(in srgb, var(--color-success) 8%, transparent); color: var(--color-success); border-color: color-mix(in srgb, var(--color-success) 25%, transparent); }
1144 &--none { background: color-mix(in srgb, var(--text-secondary) 6%, transparent); color: var(--text-muted); border-color: color-mix(in srgb, var(--text-secondary) 20%, transparent); }
1145 }
1146
1147 .proposal-branch-name {
1148 font-family: var(--font-mono);
1149 font-size: 11px;
1150 padding: 2px 7px;
1151 border-radius: var(--radius-sm);
1152 background: rgba(255,255,255,0.04);
1153 border: 1px solid var(--border-subtle);
1154 text-decoration: none;
1155 transition: border-color var(--transition-fast), background var(--transition-fast);
1156
1157 &--from {
1158 color: var(--color-accent);
1159 &:hover { border-color: color-mix(in srgb, var(--color-accent) 45%, transparent); background: color-mix(in srgb, var(--color-accent) 8%, transparent); }
1160 }
1161 &--to {
1162 color: var(--text-secondary);
1163 &:hover { border-color: var(--border-default); background: rgba(255,255,255,0.06); color: var(--text-primary); }
1164 }
1165 &--block { display: block; margin-bottom: 4px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
1166 }
1167
1168 // ── Reviewers ─────────────────────────────────────────────────────────────────
1169
1170 .proposal-reviewer {
1171 display: flex;
1172 align-items: center;
1173 gap: 8px;
1174 padding: 5px 0;
1175 border-bottom: 1px solid var(--border-subtle);
1176 &:last-child { border-bottom: none; }
1177 }
1178
1179 .proposal-reviewer-avatar {
1180 width: 28px;
1181 height: 28px;
1182 border-radius: 50%;
1183 overflow: hidden;
1184 flex-shrink: 0;
1185 border: 1px solid;
1186
1187 img { width: 100%; height: 100%; display: block; }
1188
1189 &--approved { border-color: color-mix(in srgb, var(--color-success) 40%, transparent); }
1190 &--changes { border-color: color-mix(in srgb, var(--color-warning) 40%, transparent); }
1191 &--pending { border-color: color-mix(in srgb, var(--text-secondary) 25%, transparent); }
1192 }
1193
1194 .proposal-reviewer-info { flex: 1; min-width: 0; }
1195 .proposal-reviewer-name { font-size: 12px; color: var(--text-primary); display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
1196 .proposal-reviewer-state {
1197 font-size: 10px; font-weight: 600; display: block;
1198 &--approved { color: var(--color-success); }
1199 &--changes { color: var(--color-warning); }
1200 &--pending { color: var(--text-muted); }
1201 }
1202
1203 // ── Timeline ──────────────────────────────────────────────────────────────────
1204
1205 .proposal-tl-item {
1206 display: flex;
1207 align-items: flex-start;
1208 gap: 8px;
1209 padding: 6px 0;
1210 position: relative;
1211
1212 &:not(:last-child)::before {
1213 content: '';
1214 position: absolute;
1215 left: 3px;
1216 top: 18px;
1217 bottom: -6px;
1218 width: 1px;
1219 background: var(--border-subtle);
1220 }
1221 }
1222
1223 .proposal-tl-dot {
1224 width: 7px;
1225 height: 7px;
1226 border-radius: 50%;
1227 margin-top: 4px;
1228 flex-shrink: 0;
1229 border: 1px solid;
1230
1231 &--open { background: color-mix(in srgb, var(--color-success) 30%, transparent); border-color: var(--color-success); }
1232 &--merged { background: color-mix(in srgb, var(--color-purple) 30%, transparent); border-color: $proposal-merged; }
1233 &--closed { background: color-mix(in srgb, var(--color-danger) 20%, transparent); border-color: var(--color-danger); }
1234 &--wait { background: transparent; border-color: var(--border-default); }
1235 }
1236
1237 .proposal-tl-content { flex: 1; min-width: 0; }
1238 .proposal-tl-actor {
1239 font-size: 12px;
1240 font-weight: 500;
1241 color: var(--text-primary);
1242 display: inline-flex;
1243 align-items: center;
1244 gap: 5px;
1245 }
1246
1247 .proposal-tl-sigil {
1248 width: 16px;
1249 height: 16px;
1250 border-radius: 50%;
1251 overflow: hidden;
1252 flex-shrink: 0;
1253 display: inline-block;
1254 }
1255 .proposal-tl-event { font-size: 12px; color: var(--text-muted); }
1256 .proposal-tl-date { font-size: 10px; color: var(--text-muted); margin-top: 1px; }
1257
1258 // ── Risk band ─────────────────────────────────────────────────────────────────
1259
1260 @mixin risk-band-theme($color) {
1261 border-color: color-mix(in srgb, #{$color} 30%, transparent);
1262 .proposal-risk-band-glow { background: radial-gradient(ellipse 70% 100% at 50% -10%, color-mix(in srgb, #{$color} 7%, transparent) 0%, transparent 70%); }
1263 .proposal-risk-num { fill: $color; }
1264 .proposal-risk-ring-arc--low { stroke: $risk-low; }
1265 .proposal-risk-ring-arc--medium { stroke: $risk-medium; }
1266 .proposal-risk-ring-arc--high { stroke: $risk-high; }
1267 .proposal-risk-ring-arc--critical { stroke: $risk-critical; }
1268 .proposal-risk-label { color: $color; }
1269 }
1270
1271 .proposal-risk-band {
1272 position: relative;
1273 overflow: hidden;
1274 border: 1px solid;
1275 border-radius: var(--radius);
1276 margin-bottom: 0.75rem;
1277 background: var(--bg-surface);
1278
1279 &--low { @include risk-band-theme($risk-low); }
1280 &--medium { @include risk-band-theme($risk-medium); }
1281 &--high { @include risk-band-theme($risk-high); }
1282 &--critical { @include risk-band-theme($risk-critical); }
1283 }
1284
1285 .proposal-risk-band-glow { position: absolute; inset: 0; pointer-events: none; }
1286
1287 .proposal-risk-ring { display: block; flex-shrink: 0; }
1288 .proposal-risk-ring-arc { transition: stroke-dashoffset 0.5s cubic-bezier(0.4, 0, 0.2, 1); }
1289
1290 .proposal-risk-label {
1291 font-size: 0.9rem;
1292 font-weight: 800;
1293 font-family: var(--font-mono);
1294 line-height: 1;
1295 }
1296
1297 .proposal-risk-sublabel {
1298 font-size: 0.62rem;
1299 font-weight: 600;
1300 text-transform: uppercase;
1301 letter-spacing: 0.07em;
1302 color: var(--text-muted);
1303 }
1304
1305 .proposal-risk-dim-sep {
1306 width: 1px;
1307 height: 28px;
1308 background: rgba(255,255,255,0.06);
1309 align-self: center;
1310 }
1311
1312 .proposal-risk-dim-val {
1313 font-size: 1rem;
1314 font-weight: 700;
1315 font-family: var(--font-mono);
1316 color: var(--text-primary);
1317 line-height: 1;
1318 &--warn { color: $risk-medium; }
1319 &--danger { color: $risk-critical; }
1320 &--ok { color: $risk-low; }
1321 &--agent { color: var(--color-purple); }
1322 }
1323
1324 .proposal-risk-dim-key {
1325 font-size: 0.6rem;
1326 font-weight: 600;
1327 text-transform: uppercase;
1328 letter-spacing: 0.07em;
1329 color: var(--text-muted);
1330 margin-top: 0.2rem;
1331 white-space: nowrap;
1332 }
1333
1334
1335 .prd-agent-contrib {
1336 display: inline-flex;
1337 align-items: center;
1338 gap: 3px;
1339 font-size: 0.78rem;
1340 color: var(--color-accent-emphasis, var(--color-accent));
1341 opacity: 0.85;
1342 svg { vertical-align: -1px; }
1343 }
1344
1345 // ── Blast radius note ─────────────────────────────────────────────────────────
1346
1347 .proposal-blast-note {
1348 display: inline-flex;
1349 align-items: center;
1350 gap: 0.3rem;
1351 margin-left: 0.5rem;
1352 font-size: 0.75rem;
1353 color: var(--text-muted);
1354 svg { color: $risk-medium; flex-shrink: 0; }
1355 strong { color: $risk-medium; }
1356 }
1357
1358 .proposal-blast-link {
1359 color: var(--color-accent-link);
1360 text-decoration: none;
1361 &:hover { text-decoration: underline; }
1362 }
1363
1364 // ── Symbol-anchored comments ──────────────────────────────────────────────────
1365
1366 .proposal-sym-anchor-btn {
1367 display: inline-flex;
1368 align-items: center;
1369 justify-content: center;
1370 padding: 2px 4px;
1371 border: 1px solid transparent;
1372 border-radius: 3px;
1373 background: transparent;
1374 color: var(--text-muted);
1375 cursor: pointer;
1376 opacity: 0;
1377 transition: opacity 0.1s, color 0.1s, border-color 0.1s;
1378 flex-shrink: 0;
1379 .proposal-sym-item:hover & { opacity: 1; }
1380 &:hover {
1381 color: var(--color-accent-link);
1382 border-color: color-mix(in srgb, var(--color-accent) 30%, transparent);
1383 background: color-mix(in srgb, var(--color-accent) 6%, transparent);
1384 }
1385 }
1386
1387 .proposal-sym-anchor-row {
1388 display: flex;
1389 align-items: center;
1390 gap: 0.4rem;
1391 padding: 0.3rem 0.5rem;
1392 background: color-mix(in srgb, var(--color-accent) 6%, transparent);
1393 border: 1px solid color-mix(in srgb, var(--color-accent) 20%, transparent);
1394 border-radius: 4px;
1395 margin-bottom: 0.4rem;
1396 font-size: 0.75rem;
1397 color: var(--color-accent-link);
1398 svg { flex-shrink: 0; }
1399 }
1400
1401 .proposal-sym-anchor-label { color: var(--text-muted); }
1402
1403 .proposal-sym-anchor-addr {
1404 font-family: var(--font-mono);
1405 font-size: 0.72rem;
1406 color: var(--text-primary);
1407 flex: 1;
1408 min-width: 0;
1409 overflow: hidden;
1410 text-overflow: ellipsis;
1411 white-space: nowrap;
1412 }
1413
1414 .proposal-sym-anchor-clear {
1415 border: none;
1416 background: transparent;
1417 color: var(--text-muted);
1418 cursor: pointer;
1419 font-size: 0.7rem;
1420 padding: 0 2px;
1421 line-height: 1;
1422 flex-shrink: 0;
1423 &:hover { color: var(--color-danger); }
1424 }
1425
1426 .pd-sym-anchor {
1427 display: inline-flex;
1428 align-items: center;
1429 gap: 0.3rem;
1430 padding: 2px 8px 2px 6px;
1431 border-radius: 9999px;
1432 background: color-mix(in srgb, var(--color-accent) 8%, transparent);
1433 border: 1px solid color-mix(in srgb, var(--color-accent) 20%, transparent);
1434 font-size: 0.68rem;
1435 color: var(--color-accent-link);
1436 text-decoration: none;
1437 svg { flex-shrink: 0; }
1438 code {
1439 font-family: var(--font-mono);
1440 font-size: 0.68rem;
1441 color: var(--text-primary);
1442 max-width: 260px;
1443 overflow: hidden;
1444 text-overflow: ellipsis;
1445 white-space: nowrap;
1446 display: inline-block;
1447 vertical-align: middle;
1448 }
1449 &:hover {
1450 border-color: color-mix(in srgb, var(--color-accent) 40%, transparent);
1451 background: color-mix(in srgb, var(--color-accent) 12%, transparent);
1452 }
1453 }
1454
1455 // Merge gate checklist
1456 .proposal-gate-list {
1457 display: flex;
1458 flex-direction: column;
1459 gap: 4px;
1460 }
1461
1462 .proposal-gate-item {
1463 display: flex;
1464 align-items: flex-start;
1465 gap: 6px;
1466 padding: 4px 0;
1467 border-bottom: 1px solid var(--border-subtle);
1468 &:last-child { border-bottom: none; }
1469 }
1470
1471 .proposal-gate-icon {
1472 flex-shrink: 0;
1473 width: 14px;
1474 height: 14px;
1475 margin-top: 1px;
1476 display: flex;
1477 align-items: center;
1478 justify-content: center;
1479 font-size: 11px;
1480 font-weight: 700;
1481 &--pass { color: var(--color-success); }
1482 &--fail { color: var(--color-danger); }
1483 &--unknown { color: var(--text-muted); }
1484 }
1485
1486 .proposal-gate-body {
1487 flex: 1;
1488 min-width: 0;
1489 }
1490
1491 .proposal-gate-label {
1492 font-size: 11px;
1493 font-weight: 500;
1494 color: var(--text-secondary);
1495 line-height: 1.3;
1496 }
1497
1498 .proposal-gate-detail {
1499 font-size: 10px;
1500 color: var(--text-muted);
1501 margin-top: 1px;
1502 white-space: nowrap;
1503 overflow: hidden;
1504 text-overflow: ellipsis;
1505 }
1506
1507 .proposal-gate-all-pass {
1508 font-size: 11px;
1509 color: var(--color-success);
1510 display: flex;
1511 align-items: center;
1512 gap: 4px;
1513 }
File History 2 commits
sha256:f99af7b1a7f36c4d537d1c630d4b71fc39222b1255f82e930929e2fc89015e11 fix: relax browse_repo perf budget to 500ms — 200ms was too… Sonnet 4.6 100 days ago
sha256:763eb2cb8675073b84c19345b27586d2ed939a9aee97c5479b69f502f1a70eff fix(tests): update test suite to match current implementation Sonnet 4.6 patch 121 days ago