gabriel / musehub public
_proposal-detail.scss
1,718 lines 49.6 KB
Raw
sha256:94ef169c149a452bff7c604ded8b280b19bd477c2dabcb56972780b0b784c7aa Merge 'fix/assignee-sigil-inline' into 'dev' — proposal: As… Human 1 day 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 // ── CLI Quick Reference card ─────────────────────────────────────────────────
1025
1026 .proposal-section--cli {
1027 border-bottom: none;
1028 }
1029
1030 .proposal-cli-ref {
1031 background: var(--bg-elevated);
1032 border: 1px solid var(--border-subtle);
1033 border-radius: var(--radius-md);
1034 overflow: hidden;
1035 }
1036
1037 .proposal-cli-ref-row {
1038 display: grid;
1039 grid-template-columns: 140px 1fr;
1040 align-items: center;
1041 gap: var(--space-3);
1042 padding: 10px var(--space-4);
1043 border-bottom: 1px solid var(--border-subtle);
1044 &:last-child { border-bottom: none; }
1045 }
1046
1047 .proposal-cli-ref-label {
1048 font-size: 12px;
1049 font-weight: 500;
1050 color: var(--text-muted);
1051 white-space: nowrap;
1052 flex-shrink: 0;
1053 }
1054
1055 .proposal-cli-ref-row--note {
1056 align-items: flex-start;
1057 background: color-mix(in srgb, var(--bg-void) 60%, transparent);
1058 }
1059
1060 .proposal-cli-ref-note {
1061 display: flex;
1062 flex-direction: column;
1063 gap: 4px;
1064 }
1065
1066 .proposal-cli-ref-aside {
1067 font-size: 11px;
1068 color: var(--text-muted);
1069 line-height: 1.5;
1070
1071 .proposal-cli-ref-flag {
1072 font-size: 11px;
1073 }
1074 }
1075
1076 .proposal-cli-ref-divider {
1077 padding: 8px var(--space-4);
1078 font-size: 11px;
1079 color: var(--text-muted);
1080 background: var(--bg-void);
1081 border-bottom: 1px solid var(--border-subtle);
1082 border-top: 1px solid var(--border-subtle);
1083
1084 .proposal-cli-ref-flag {
1085 display: inline;
1086 padding: 0 4px;
1087 background: var(--bg-elevated);
1088 border: 1px solid var(--border-default);
1089 border-radius: 3px;
1090 font-family: var(--font-mono);
1091 font-size: 11px;
1092 color: var(--text-secondary);
1093 }
1094 }
1095
1096 .proposal-cli-cmd {
1097 display: inline-block;
1098 padding: 1px 7px;
1099 background: var(--bg-void);
1100 border: 1px solid var(--border-default);
1101 border-radius: var(--radius-xs, 4px);
1102 font-size: 12px;
1103 font-family: var(--font-mono);
1104 color: var(--color-accent);
1105 white-space: nowrap;
1106 overflow-x: auto;
1107
1108 // Block variant: full width, wraps within its grid cell
1109 &--block {
1110 display: block;
1111 white-space: pre-wrap;
1112 word-break: break-all;
1113 overflow-x: visible;
1114 background: transparent;
1115 border: none;
1116 padding: 0;
1117 color: var(--color-accent);
1118 font-size: 12px;
1119 }
1120 }
1121
1122 // ── Legacy CLI hint (kept for other usages) ───────────────────────────────────
1123
1124 .proposal-cli-hint {
1125 display: flex;
1126 align-items: center;
1127 gap: var(--space-2);
1128 padding: var(--space-3) var(--space-4);
1129 background: var(--bg-elevated);
1130 border: 1px solid var(--border-subtle);
1131 border-radius: var(--radius-sm);
1132 font-size: 13px;
1133 color: var(--text-secondary);
1134 margin-top: var(--space-3);
1135
1136 .proposal-cli-hint-icon { flex-shrink: 0; opacity: 0.6; }
1137 }
1138
1139 // ── Sidebar ───────────────────────────────────────────────────────────────────
1140
1141 .proposal-scard {
1142 border-bottom: 1px solid var(--border-subtle);
1143 padding: var(--space-4) 0;
1144 &:first-child { padding-top: 0; }
1145 &:last-child { border-bottom: none; }
1146 }
1147
1148 .proposal-scard-hd {
1149 font-size: 11px;
1150 font-weight: 600;
1151 text-transform: uppercase;
1152 letter-spacing: 0.08em;
1153 color: var(--text-muted);
1154 margin-bottom: var(--space-2);
1155 }
1156
1157 .proposal-scard-label {
1158 font-size: 11px;
1159 color: var(--text-muted);
1160 margin-bottom: 3px;
1161 margin-top: var(--space-2);
1162 &:first-child { margin-top: 0; }
1163 }
1164
1165 .proposal-scard-desc { font-size: 11px; color: var(--text-muted); line-height: 1.5; margin: var(--space-2) 0 0; }
1166 .proposal-scard-empty { font-size: 12px; color: var(--text-muted); font-style: italic; margin: 0; }
1167
1168 .proposal-state-pill {
1169 display: inline-flex;
1170 align-items: center;
1171 gap: 5px;
1172 padding: 3px 10px;
1173 border-radius: var(--radius-sm);
1174 font-size: 12px;
1175 font-weight: 600;
1176 border: 1px solid;
1177
1178 &--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); }
1179 &--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); }
1180 &--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); }
1181 &--wide { width: 100%; justify-content: center; }
1182 }
1183
1184 .proposal-scard-semver {
1185 display: flex;
1186 align-items: center;
1187 gap: 6px;
1188 font-size: 12px;
1189 font-weight: 600;
1190 padding: 6px 10px;
1191 border-radius: var(--radius-sm);
1192 border: 1px solid;
1193
1194 svg { flex-shrink: 0; }
1195
1196 &--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); }
1197 &--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); }
1198 &--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); }
1199 &--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); }
1200 }
1201
1202 .proposal-branch-name {
1203 font-family: var(--font-mono);
1204 font-size: 11px;
1205 padding: 2px 7px;
1206 border-radius: var(--radius-sm);
1207 background: rgba(255,255,255,0.04);
1208 border: 1px solid var(--border-subtle);
1209 text-decoration: none;
1210 transition: border-color var(--transition-fast), background var(--transition-fast);
1211
1212 &--from {
1213 color: var(--color-accent);
1214 &:hover { border-color: color-mix(in srgb, var(--color-accent) 45%, transparent); background: color-mix(in srgb, var(--color-accent) 8%, transparent); }
1215 }
1216 &--to {
1217 color: var(--text-secondary);
1218 &:hover { border-color: var(--border-default); background: rgba(255,255,255,0.06); color: var(--text-primary); }
1219 }
1220 &--block { display: block; margin-bottom: 4px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
1221 }
1222
1223 // ── Reviewers ─────────────────────────────────────────────────────────────────
1224
1225 .proposal-reviewer {
1226 display: flex;
1227 flex-direction: column;
1228 gap: 0;
1229 padding: 6px 0;
1230 border-bottom: 1px solid var(--border-subtle);
1231 &:last-child { border-bottom: none; }
1232
1233 &--with-feedback {
1234 padding-bottom: 8px;
1235 }
1236 }
1237
1238 .proposal-reviewer-top {
1239 display: flex;
1240 align-items: center;
1241 gap: 8px;
1242 }
1243
1244 .proposal-reviewer-feedback {
1245 margin-top: 6px;
1246 margin-left: 36px; // indent to align with name (avatar 28px + gap 8px)
1247 padding: 6px 8px;
1248 font-size: 11px;
1249 line-height: 1.5;
1250 color: var(--color-warning);
1251 background: color-mix(in srgb, var(--color-warning) 8%, transparent);
1252 border-left: 2px solid color-mix(in srgb, var(--color-warning) 50%, transparent);
1253 border-radius: 0 var(--radius-xs) var(--radius-xs) 0;
1254 white-space: pre-wrap;
1255 word-break: break-word;
1256 }
1257
1258 .proposal-reviewer-avatar {
1259 width: 28px;
1260 height: 28px;
1261 border-radius: 50%;
1262 overflow: hidden;
1263 flex-shrink: 0;
1264 border: 1px solid;
1265
1266 img { width: 100%; height: 100%; display: block; }
1267
1268 &--approved { border-color: color-mix(in srgb, var(--color-success) 40%, transparent); }
1269 &--changes { border-color: color-mix(in srgb, var(--color-warning) 40%, transparent); }
1270 &--pending { border-color: color-mix(in srgb, var(--text-secondary) 25%, transparent); }
1271 }
1272
1273 .proposal-reviewer-info { flex: 1; min-width: 0; }
1274 .proposal-reviewer-name { font-size: 12px; color: var(--text-primary); display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
1275 .proposal-reviewer-state {
1276 font-size: 10px; font-weight: 600; display: block;
1277 &--approved { color: var(--color-success); }
1278 &--changes { color: var(--color-warning); }
1279 &--pending { color: var(--text-muted); }
1280 }
1281
1282 // ── Timeline ──────────────────────────────────────────────────────────────────
1283
1284 .proposal-tl-item {
1285 display: flex;
1286 align-items: flex-start;
1287 gap: 8px;
1288 padding: 6px 0;
1289 position: relative;
1290
1291 &:not(:last-child)::before {
1292 content: '';
1293 position: absolute;
1294 left: 3px;
1295 top: 18px;
1296 bottom: -6px;
1297 width: 1px;
1298 background: var(--border-subtle);
1299 }
1300 }
1301
1302 .proposal-tl-dot {
1303 width: 7px;
1304 height: 7px;
1305 border-radius: 50%;
1306 margin-top: 4px;
1307 flex-shrink: 0;
1308 border: 1px solid;
1309
1310 &--open { background: color-mix(in srgb, var(--color-success) 30%, transparent); border-color: var(--color-success); }
1311 &--merged { background: color-mix(in srgb, var(--color-purple) 30%, transparent); border-color: $proposal-merged; }
1312 &--closed { background: color-mix(in srgb, var(--color-danger) 20%, transparent); border-color: var(--color-danger); }
1313 &--wait { background: transparent; border-color: var(--border-default); }
1314 }
1315
1316 .proposal-tl-content { flex: 1; min-width: 0; }
1317 .proposal-tl-actor {
1318 font-size: 12px;
1319 font-weight: 500;
1320 color: var(--text-primary);
1321 display: inline-flex;
1322 align-items: center;
1323 gap: 5px;
1324 }
1325
1326 .proposal-tl-sigil {
1327 width: 16px;
1328 height: 16px;
1329 border-radius: 50%;
1330 overflow: hidden;
1331 flex-shrink: 0;
1332 display: inline-block;
1333 }
1334 .proposal-tl-event { font-size: 12px; color: var(--text-muted); }
1335 .proposal-tl-date { font-size: 10px; color: var(--text-muted); margin-top: 1px; }
1336
1337 // ── Risk band ─────────────────────────────────────────────────────────────────
1338
1339 @mixin risk-band-theme($color) {
1340 border-color: color-mix(in srgb, #{$color} 30%, transparent);
1341 .proposal-risk-band-glow { background: radial-gradient(ellipse 70% 100% at 50% -10%, color-mix(in srgb, #{$color} 7%, transparent) 0%, transparent 70%); }
1342 .proposal-risk-num { fill: $color; }
1343 .proposal-risk-ring-arc--low { stroke: $risk-low; }
1344 .proposal-risk-ring-arc--medium { stroke: $risk-medium; }
1345 .proposal-risk-ring-arc--high { stroke: $risk-high; }
1346 .proposal-risk-ring-arc--critical { stroke: $risk-critical; }
1347 .proposal-risk-label { color: $color; }
1348 }
1349
1350 .proposal-risk-band {
1351 position: relative;
1352 overflow: hidden;
1353 border: 1px solid;
1354 border-radius: var(--radius);
1355 margin-bottom: 0.75rem;
1356 background: var(--bg-surface);
1357
1358 &--low { @include risk-band-theme($risk-low); }
1359 &--medium { @include risk-band-theme($risk-medium); }
1360 &--high { @include risk-band-theme($risk-high); }
1361 &--critical { @include risk-band-theme($risk-critical); }
1362 }
1363
1364 .proposal-risk-band-glow { position: absolute; inset: 0; pointer-events: none; }
1365
1366 .proposal-risk-ring { display: block; flex-shrink: 0; }
1367 .proposal-risk-ring-arc { transition: stroke-dashoffset 0.5s cubic-bezier(0.4, 0, 0.2, 1); }
1368
1369 .proposal-risk-label {
1370 font-size: 0.9rem;
1371 font-weight: 800;
1372 font-family: var(--font-mono);
1373 line-height: 1;
1374 }
1375
1376 .proposal-risk-sublabel {
1377 font-size: 0.62rem;
1378 font-weight: 600;
1379 text-transform: uppercase;
1380 letter-spacing: 0.07em;
1381 color: var(--text-muted);
1382 }
1383
1384 .proposal-risk-dim-sep {
1385 width: 1px;
1386 height: 28px;
1387 background: rgba(255,255,255,0.06);
1388 align-self: center;
1389 }
1390
1391 .proposal-risk-dim-val {
1392 font-size: 1rem;
1393 font-weight: 700;
1394 font-family: var(--font-mono);
1395 color: var(--text-primary);
1396 line-height: 1;
1397 &--warn { color: $risk-medium; }
1398 &--danger { color: $risk-critical; }
1399 &--ok { color: $risk-low; }
1400 &--agent { color: var(--color-purple); }
1401 }
1402
1403 .proposal-risk-dim-key {
1404 font-size: 0.6rem;
1405 font-weight: 600;
1406 text-transform: uppercase;
1407 letter-spacing: 0.07em;
1408 color: var(--text-muted);
1409 margin-top: 0.2rem;
1410 white-space: nowrap;
1411 }
1412
1413
1414 .prd-agent-contrib {
1415 display: inline-flex;
1416 align-items: center;
1417 gap: 3px;
1418 font-size: 0.78rem;
1419 color: var(--color-accent-emphasis, var(--color-accent));
1420 opacity: 0.85;
1421 svg { vertical-align: -1px; }
1422 }
1423
1424 // ── Blast radius note ─────────────────────────────────────────────────────────
1425
1426 .proposal-blast-note {
1427 display: inline-flex;
1428 align-items: center;
1429 gap: 0.3rem;
1430 margin-left: 0.5rem;
1431 font-size: 0.75rem;
1432 color: var(--text-muted);
1433 svg { color: $risk-medium; flex-shrink: 0; }
1434 strong { color: $risk-medium; }
1435 }
1436
1437 .proposal-blast-link {
1438 color: var(--color-accent-link);
1439 text-decoration: none;
1440 &:hover { text-decoration: underline; }
1441 }
1442
1443 // ── Symbol-anchored comments ──────────────────────────────────────────────────
1444
1445 .proposal-sym-anchor-btn {
1446 display: inline-flex;
1447 align-items: center;
1448 justify-content: center;
1449 padding: 2px 4px;
1450 border: 1px solid transparent;
1451 border-radius: 3px;
1452 background: transparent;
1453 color: var(--text-muted);
1454 cursor: pointer;
1455 opacity: 0;
1456 transition: opacity 0.1s, color 0.1s, border-color 0.1s;
1457 flex-shrink: 0;
1458 .proposal-sym-item:hover & { opacity: 1; }
1459 &:hover {
1460 color: var(--color-accent-link);
1461 border-color: color-mix(in srgb, var(--color-accent) 30%, transparent);
1462 background: color-mix(in srgb, var(--color-accent) 6%, transparent);
1463 }
1464 }
1465
1466 .proposal-sym-anchor-row {
1467 display: flex;
1468 align-items: center;
1469 gap: 0.4rem;
1470 padding: 0.3rem 0.5rem;
1471 background: color-mix(in srgb, var(--color-accent) 6%, transparent);
1472 border: 1px solid color-mix(in srgb, var(--color-accent) 20%, transparent);
1473 border-radius: 4px;
1474 margin-bottom: 0.4rem;
1475 font-size: 0.75rem;
1476 color: var(--color-accent-link);
1477 svg { flex-shrink: 0; }
1478 }
1479
1480 .proposal-sym-anchor-label { color: var(--text-muted); }
1481
1482 .proposal-sym-anchor-addr {
1483 font-family: var(--font-mono);
1484 font-size: 0.72rem;
1485 color: var(--text-primary);
1486 flex: 1;
1487 min-width: 0;
1488 overflow: hidden;
1489 text-overflow: ellipsis;
1490 white-space: nowrap;
1491 }
1492
1493 .proposal-sym-anchor-clear {
1494 border: none;
1495 background: transparent;
1496 color: var(--text-muted);
1497 cursor: pointer;
1498 font-size: 0.7rem;
1499 padding: 0 2px;
1500 line-height: 1;
1501 flex-shrink: 0;
1502 &:hover { color: var(--color-danger); }
1503 }
1504
1505 .pd-sym-anchor {
1506 display: inline-flex;
1507 align-items: center;
1508 gap: 0.3rem;
1509 padding: 2px 8px 2px 6px;
1510 border-radius: 9999px;
1511 background: color-mix(in srgb, var(--color-accent) 8%, transparent);
1512 border: 1px solid color-mix(in srgb, var(--color-accent) 20%, transparent);
1513 font-size: 0.68rem;
1514 color: var(--color-accent-link);
1515 text-decoration: none;
1516 svg { flex-shrink: 0; }
1517 code {
1518 font-family: var(--font-mono);
1519 font-size: 0.68rem;
1520 color: var(--text-primary);
1521 max-width: 260px;
1522 overflow: hidden;
1523 text-overflow: ellipsis;
1524 white-space: nowrap;
1525 display: inline-block;
1526 vertical-align: middle;
1527 }
1528 &:hover {
1529 border-color: color-mix(in srgb, var(--color-accent) 40%, transparent);
1530 background: color-mix(in srgb, var(--color-accent) 12%, transparent);
1531 }
1532 }
1533
1534 // Merge gate checklist
1535 .proposal-gate-list {
1536 display: flex;
1537 flex-direction: column;
1538 gap: 4px;
1539 }
1540
1541 .proposal-gate-item {
1542 display: flex;
1543 align-items: flex-start;
1544 gap: 6px;
1545 padding: 4px 0;
1546 border-bottom: 1px solid var(--border-subtle);
1547 &:last-child { border-bottom: none; }
1548 }
1549
1550 .proposal-gate-icon {
1551 flex-shrink: 0;
1552 width: 14px;
1553 height: 14px;
1554 margin-top: 1px;
1555 display: flex;
1556 align-items: center;
1557 justify-content: center;
1558 font-size: 11px;
1559 font-weight: 700;
1560 &--pass { color: var(--color-success); }
1561 &--fail { color: var(--color-danger); }
1562 &--unknown { color: var(--text-muted); }
1563 }
1564
1565 .proposal-gate-body {
1566 flex: 1;
1567 min-width: 0;
1568 }
1569
1570 .proposal-gate-label {
1571 font-size: 11px;
1572 font-weight: 500;
1573 color: var(--text-secondary);
1574 line-height: 1.3;
1575 }
1576
1577 .proposal-gate-detail {
1578 font-size: 10px;
1579 color: var(--text-muted);
1580 margin-top: 1px;
1581 white-space: nowrap;
1582 overflow: hidden;
1583 text-overflow: ellipsis;
1584 }
1585
1586 .proposal-gate-all-pass {
1587 font-size: 11px;
1588 color: var(--color-success);
1589 display: flex;
1590 align-items: center;
1591 gap: 4px;
1592 }
1593
1594 // ── Comment thread ────────────────────────────────────────────────────────────
1595
1596 .pdc-thread {
1597 display: flex;
1598 flex-direction: column;
1599 }
1600
1601 .pdc-comment {
1602 display: grid;
1603 grid-template-columns: 32px 1fr;
1604 gap: var(--space-3);
1605 padding: var(--space-4) var(--space-3);
1606 border-radius: var(--radius-sm);
1607 scroll-margin-top: calc(var(--sticky-offset) + var(--space-4));
1608
1609 &--odd {
1610 background: color-mix(in srgb, var(--bg-elevated) 50%, transparent);
1611 }
1612
1613 & + & {
1614 border-top: 1px solid var(--border-subtle);
1615 }
1616 }
1617
1618 .pdc-sigil {
1619 padding-top: 2px;
1620 }
1621
1622 .pdc-sigil-link {
1623 text-decoration: none;
1624 display: block;
1625
1626 &--sm { display: flex; }
1627 }
1628
1629 .pdc-sigil-img {
1630 display: block;
1631 border-radius: 50%;
1632 object-fit: contain;
1633
1634 &--sm {
1635 width: 24px;
1636 height: 24px;
1637 }
1638 }
1639
1640 .pdc-content {
1641 display: flex;
1642 flex-direction: column;
1643 gap: var(--space-2);
1644 min-width: 0;
1645 }
1646
1647 .pdc-meta {
1648 display: flex;
1649 align-items: center;
1650 gap: var(--space-2);
1651 flex-wrap: wrap;
1652 }
1653
1654 .pdc-author {
1655 font-size: 13px;
1656 font-weight: 600;
1657 color: var(--text-primary);
1658 text-decoration: none;
1659
1660 &:hover { text-decoration: underline; }
1661 }
1662
1663 .pdc-ts {
1664 font-size: 12px;
1665 color: var(--text-muted);
1666 text-decoration: none;
1667
1668 &:hover { color: var(--text-secondary); text-decoration: underline; }
1669 }
1670
1671 .pdc-anchor {
1672 display: inline-flex;
1673 align-items: center;
1674 gap: 4px;
1675 font-size: 11px;
1676 color: var(--color-accent);
1677 text-decoration: none;
1678 padding: 1px 6px;
1679 background: color-mix(in srgb, var(--color-accent) 10%, transparent);
1680 border-radius: var(--radius-xs);
1681
1682 code { font-size: 11px; color: inherit; }
1683 }
1684
1685 .pdc-body {
1686 font-size: 13px;
1687 color: var(--text-primary);
1688 line-height: 1.6;
1689 white-space: pre-wrap;
1690 word-break: break-word;
1691 }
1692
1693 .pdc-replies {
1694 display: flex;
1695 flex-direction: column;
1696 gap: var(--space-3);
1697 margin-top: var(--space-2);
1698 padding-left: var(--space-4);
1699 border-left: 2px solid var(--border-subtle);
1700 }
1701
1702 .pdc-reply {
1703 display: grid;
1704 grid-template-columns: 24px 1fr;
1705 gap: var(--space-2);
1706 }
1707
1708 .pdc-reply-content {
1709 display: flex;
1710 flex-direction: column;
1711 gap: 4px;
1712 }
1713
1714 .rh-avatar--sm {
1715 width: 24px;
1716 height: 24px;
1717 font-size: 10px;
1718 }
File History 3 commits
sha256:94ef169c149a452bff7c604ded8b280b19bd477c2dabcb56972780b0b784c7aa Merge 'fix/assignee-sigil-inline' into 'dev' — proposal: As… Human 1 day ago
sha256:6b1949fc2797ca4c1936a637a4cbfec828ef56cf52398a2e74ca3c4f494e728f fix: use wire_bytes not mpack_bytes_raw in compute_object_b… Sonnet 4.6 patch 9 days ago
sha256:4aed3d8601c8dd3ed37074de35f11f4a9699a0a4b99d43727048fd3f8e6fd13d chore: doc sweep, ignore wrangler build state, misc fixes Sonnet 4.6 minor 12 days ago