components.css
Raw
1@layer components {
2 /* --- Buttons --- */
3 .btn {
4 display: inline-flex;
5 align-items: center;
6 gap: var(--space-2);
7 padding: var(--space-2) var(--space-4);
8 border: 1px solid var(--color-border);
9 border-radius: var(--radius-md);
10 font-size: var(--text-sm);
11 font-weight: 500;
12 text-decoration: none;
13 cursor: pointer;
14 background: var(--color-bg-subtle);
15 color: var(--color-text);
16 transition:
17 background 0.1s,
18 border-color 0.1s;
19 white-space: nowrap;
20 }
21 .btn:hover {
22 background: var(--color-bg-inset);
23 border-color: var(--color-border);
24 }
25 .btn:disabled {
26 opacity: 0.5;
27 cursor: not-allowed;
28 }
29 .btn-primary {
30 background: var(--color-accent);
31 border-color: transparent;
32 color: #fff;
33 }
34 .btn-primary:hover {
35 background: color-mix(in srgb, var(--color-accent) 82%, #000);
36 }
37 .btn-secondary {
38 background: var(--color-bg-subtle);
39 border-color: var(--color-border);
40 }
41 .btn-sm {
42 padding: var(--space-1) var(--space-3);
43 font-size: var(--text-xs);
44 }
45 .btn-block {
46 width: 100%;
47 justify-content: center;
48 }
49
50 /* --- Forms --- */
51 .form-group {
52 display: flex;
53 flex-direction: column;
54 gap: var(--space-2);
55 margin-bottom: var(--space-4);
56 }
57 .form-group label,
58 .form-group .form-group-label {
59 font-size: var(--text-sm);
60 font-weight: 500;
61 color: var(--color-text);
62 }
63 .form-group input:not([type="file"]):not([type="checkbox"]),
64 .form-group textarea,
65 .form-group select {
66 padding: var(--space-2) var(--space-3);
67 border: 1px solid var(--color-border);
68 border-radius: var(--radius-md);
69 background: var(--color-bg);
70 color: var(--color-text);
71 font-size: var(--text-sm);
72 }
73 .form-group input:not([type="file"]):not([type="checkbox"]):focus,
74 .form-group textarea:focus {
75 outline: 2px solid var(--color-accent);
76 outline-offset: -1px;
77 border-color: var(--color-accent);
78 }
79 .form-group input[type="file"] {
80 font-size: var(--text-sm);
81 color: var(--color-text);
82 padding: 0;
83 border: none;
84 background: none;
85 }
86 .form-group textarea {
87 resize: vertical;
88 min-height: 120px;
89 }
90 .form-success {
91 background: var(--color-success-bg);
92 color: var(--color-success);
93 border: 1px solid var(--color-success);
94 border-radius: var(--radius-md);
95 padding: var(--space-3) var(--space-4);
96 font-size: var(--text-sm);
97 margin-bottom: var(--space-4);
98 }
99 .form-hint {
100 font-size: var(--text-sm);
101 color: var(--color-text-muted);
102 margin: 0;
103 }
104 .form-error {
105 background: var(--color-danger-bg);
106 color: var(--color-danger);
107 border: 1px solid var(--color-danger);
108 border-radius: var(--radius-md);
109 padding: var(--space-3) var(--space-4);
110 font-size: var(--text-sm);
111 margin-bottom: var(--space-4);
112 }
113 .form-actions {
114 display: flex;
115 gap: var(--space-3);
116 align-items: center;
117 flex-wrap: wrap;
118 }
119 .form-card {
120 background: var(--color-bg-subtle);
121 border: 1px solid var(--color-border);
122 border-radius: var(--radius-lg);
123 padding: var(--space-6);
124 margin-top: var(--space-4);
125 }
126 .checkbox-label {
127 display: flex;
128 align-items: center;
129 gap: var(--space-2);
130 cursor: pointer;
131 }
132
133 /* --- Page header --- */
134 .page-header {
135 display: flex;
136 align-items: center;
137 justify-content: space-between;
138 margin-bottom: var(--space-6);
139 gap: var(--space-4);
140 }
141 .page-title {
142 font-size: var(--text-2xl);
143 color: var(--color-text);
144 margin-bottom: var(--space-4);
145 }
146 .page-title a {
147 text-decoration: none;
148 color: var(--color-link);
149 }
150 .page-title a:hover {
151 text-decoration: underline;
152 }
153 .section-title {
154 font-size: var(--text-lg);
155 margin-bottom: var(--space-4);
156 padding-bottom: var(--space-2);
157 border-bottom: 1px solid var(--color-border);
158 }
159
160 /* --- Auth --- */
161 .auth-container {
162 max-width: 400px;
163 margin: var(--space-12) auto;
164 }
165 .auth-container .page-title {
166 margin-bottom: var(--space-6);
167 }
168 .auth-form {
169 margin-bottom: var(--space-4);
170 }
171 .auth-footer {
172 text-align: center;
173 font-size: var(--text-sm);
174 color: var(--color-text-muted);
175 margin-top: var(--space-4);
176 }
177 .passkey-btn {
178 display: none;
179 margin-top: var(--space-3);
180 }
181
182 /* --- Repo header --- */
183 .repo-header {
184 margin-bottom: var(--space-2);
185 }
186 .repo-title-row {
187 display: flex;
188 align-items: center;
189 gap: var(--space-3);
190 flex-wrap: wrap;
191 }
192 .repo-title-row .page-title {
193 margin-bottom: 0;
194 }
195 .repo-header-title {
196 display: flex;
197 align-items: center;
198 gap: var(--space-3);
199 flex-wrap: wrap;
200 }
201 .repo-description {
202 color: var(--color-text-muted);
203 margin-top: var(--space-2);
204 }
205 .repo-header-meta {
206 display: flex;
207 align-items: center;
208 gap: var(--space-4);
209 margin-bottom: var(--space-3);
210 font-size: var(--text-sm);
211 color: var(--color-text-muted);
212 }
213 .icon {
214 font-style: normal;
215 }
216
217 /* --- Branch selector --- */
218 .branch-selector {
219 display: inline-flex;
220 align-items: center;
221 gap: var(--space-2);
222 }
223 .branch-selector-icon {
224 color: var(--color-text-muted);
225 font-size: var(--text-sm);
226 user-select: none;
227 }
228 .branch-select {
229 padding: var(--space-1) var(--space-2);
230 padding-right: var(--space-5);
231 border: 1px solid var(--color-border);
232 border-radius: var(--radius-md);
233 background: var(--color-bg-subtle);
234 font-size: var(--text-sm);
235 font-family: var(--font-mono);
236 color: var(--color-text);
237 cursor: pointer;
238 appearance: auto;
239 max-width: 180px;
240 }
241 .branch-select:hover {
242 border-color: var(--color-text-muted);
243 }
244 .branch-select:focus {
245 outline: 2px solid var(--color-accent);
246 outline-offset: -1px;
247 }
248
249 /* toolbar row above file tree */
250 .tree-toolbar {
251 display: flex;
252 align-items: center;
253 justify-content: space-between;
254 margin-bottom: var(--space-3);
255 }
256
257 /* commits-header flex row */
258 .commits-header {
259 display: flex;
260 align-items: center;
261 gap: var(--space-4);
262 margin-bottom: var(--space-4);
263 flex-wrap: wrap;
264 }
265 .commits-header .section-title {
266 margin-bottom: 0;
267 }
268
269 /* --- Repo nav bar (tabs + private badge) --- */
270 .repo-nav-bar {
271 display: flex;
272 align-items: center;
273 justify-content: space-between;
274 border-bottom: 1px solid var(--color-border);
275 margin-bottom: var(--space-6);
276 gap: var(--space-4);
277 }
278
279 /* --- Repo tabs --- */
280 .repo-tabs {
281 display: flex;
282 gap: 0;
283 flex: 1;
284 overflow-x: auto;
285 overflow-y: hidden;
286 }
287 .repo-tab {
288 padding: var(--space-3) var(--space-4);
289 font-size: var(--text-sm);
290 text-decoration: none;
291 color: var(--color-text-muted);
292 border-bottom: 2px solid transparent;
293 margin-bottom: -1px;
294 transition: color 0.1s;
295 }
296 .repo-tab:hover {
297 color: var(--color-text);
298 }
299 .repo-tab.active {
300 color: var(--color-text);
301 font-weight: 600;
302 border-bottom-color: var(--color-accent);
303 }
304
305 /* --- Repo list --- */
306 .repo-list {
307 display: flex;
308 flex-direction: column;
309 gap: var(--space-2);
310 }
311 .repo-card {
312 display: flex;
313 align-items: flex-start;
314 justify-content: space-between;
315 padding: var(--space-4) var(--space-5);
316 border: 1px solid var(--color-border);
317 border-radius: var(--radius-lg);
318 background: var(--color-bg);
319 gap: var(--space-4);
320 transition: border-color 0.15s;
321 }
322 .repo-card:hover {
323 border-color: var(--color-accent);
324 }
325 .repo-card-main {
326 flex: 1;
327 min-width: 0;
328 }
329 .repo-card-title {
330 display: flex;
331 align-items: center;
332 gap: var(--space-2);
333 margin-bottom: var(--space-1);
334 }
335 .repo-name {
336 font-size: var(--text-lg);
337 font-weight: 600;
338 color: var(--color-link);
339 text-decoration: none;
340 word-break: break-all;
341 }
342 .repo-name:hover {
343 text-decoration: underline;
344 }
345 .repo-card-meta {
346 display: flex;
347 flex-direction: column;
348 align-items: flex-end;
349 gap: var(--space-1);
350 font-size: var(--text-xs);
351 color: var(--color-text-muted);
352 white-space: nowrap;
353 }
354 .repo-date {
355 color: var(--color-text-muted);
356 }
357
358 /* --- Badges --- */
359 .badge {
360 display: inline-flex;
361 align-items: center;
362 padding: 1px var(--space-2);
363 border-radius: var(--radius-full);
364 font-size: var(--text-xs);
365 font-weight: 500;
366 border: 1px solid;
367 text-decoration: none;
368 }
369 .badge-private {
370 color: var(--color-warning);
371 border-color: var(--color-warning);
372 background: var(--color-warning-bg);
373 }
374 .badge-pinned {
375 color: var(--color-accent);
376 border-color: var(--color-accent);
377 background: var(--color-accent-bg);
378 }
379 .badge-release {
380 color: var(--color-success);
381 border-color: var(--color-success);
382 background: var(--color-success-bg);
383 }
384 .badge-release:hover {
385 text-decoration: underline;
386 }
387 .issue-badge,
388 .patch-badge {
389 display: inline-flex;
390 align-items: center;
391 padding: var(--space-1) var(--space-3);
392 border-radius: var(--radius-full);
393 font-size: var(--text-xs);
394 font-weight: 500;
395 text-transform: capitalize;
396 }
397 .issue-badge.open,
398 .patch-badge.open {
399 background: var(--color-success-bg);
400 color: var(--color-success);
401 }
402 .issue-badge.closed,
403 .patch-badge.closed {
404 background: var(--color-danger-bg);
405 color: var(--color-danger);
406 }
407 .issue-badge.completed {
408 background: var(--color-merged-bg);
409 color: var(--color-merged);
410 }
411 .patch-badge.merged {
412 background: var(--color-merged-bg);
413 color: var(--color-merged);
414 }
415 .sig-badge {
416 display: inline-flex;
417 align-items: center;
418 padding: var(--space-1) var(--space-3);
419 border-radius: var(--radius-full);
420 font-size: var(--text-xs);
421 font-weight: 500;
422 }
423 .sig-badge.verified {
424 background: var(--color-success-bg);
425 color: var(--color-success);
426 }
427 .sig-badge.unverified {
428 background: var(--color-danger-bg);
429 color: var(--color-danger);
430 }
431
432 /* --- Empty state --- */
433 .empty-state {
434 text-align: center;
435 padding: var(--space-16) var(--space-4);
436 color: var(--color-text-muted);
437 }
438 .empty-state p {
439 margin-bottom: var(--space-4);
440 font-size: var(--text-lg);
441 }
442
443 /* --- Breadcrumb --- */
444 .breadcrumb {
445 display: flex;
446 align-items: center;
447 flex-wrap: wrap;
448 gap: var(--space-1);
449 font-size: var(--text-sm);
450 margin-bottom: var(--space-4);
451 }
452 .breadcrumb a {
453 color: var(--color-link);
454 text-decoration: none;
455 text-overflow: ellipsis;
456 overflow: hidden;
457 }
458 .breadcrumb a:hover {
459 text-decoration: underline;
460 }
461 .breadcrumb-sep {
462 color: var(--color-text-muted);
463 }
464 .breadcrumb-current {
465 color: var(--color-text-muted);
466 text-overflow: ellipsis;
467 overflow: hidden;
468 }
469
470 /* --- Issue / Patch list --- */
471 .list-header {
472 display: flex;
473 align-items: center;
474 justify-content: space-between;
475 padding: var(--space-3) var(--space-4);
476 background: var(--color-bg-subtle);
477 border: 1px solid var(--color-border);
478 border-radius: var(--radius-lg) var(--radius-lg) 0 0;
479 gap: var(--space-4);
480 }
481 .list-header-tabs {
482 display: flex;
483 gap: var(--space-2);
484 }
485 .list-tab {
486 padding: var(--space-1) var(--space-3);
487 border-radius: var(--radius-md);
488 font-size: var(--text-sm);
489 text-decoration: none;
490 color: var(--color-text-muted);
491 }
492 .list-tab:hover {
493 background: var(--color-bg-inset);
494 color: var(--color-text);
495 }
496 .list-tab.active {
497 background: var(--color-bg-inset);
498 color: var(--color-text);
499 font-weight: 600;
500 }
501 .issue-list {
502 border: 1px solid var(--color-border);
503 border-top: none;
504 border-radius: 0 0 var(--radius-lg) var(--radius-lg);
505 }
506 .issue-item {
507 padding: var(--space-4) var(--space-4);
508 border-bottom: 1px solid var(--color-border-muted);
509 }
510 .issue-item:last-child {
511 border-bottom: none;
512 }
513 .issue-main {
514 display: flex;
515 align-items: center;
516 gap: var(--space-2);
517 margin-bottom: var(--space-1);
518 flex-wrap: wrap;
519 }
520 .issue-title {
521 font-weight: 500;
522 text-decoration: none;
523 color: var(--color-text);
524 flex: 1;
525 word-wrap: anywhere;
526 }
527 .issue-title:hover {
528 color: var(--color-link);
529 }
530 .issue-meta {
531 font-size: var(--text-xs);
532 color: var(--color-text-muted);
533 display: flex;
534 gap: var(--space-3);
535 }
536 .issue-status-dot,
537 .patch-status-dot {
538 width: 8px;
539 height: 8px;
540 border-radius: 50%;
541 flex-shrink: 0;
542 }
543 .issue-status-dot.open,
544 .patch-status-dot.open {
545 background: var(--color-success);
546 }
547 .issue-status-dot.closed,
548 .patch-status-dot.closed {
549 background: var(--color-danger);
550 }
551 .issue-status-dot.completed {
552 background: var(--color-merged);
553 }
554 .patch-status-dot.merged {
555 background: var(--color-merged);
556 }
557
558 /* --- Issue detail / Timeline --- */
559 .issue-detail-header {
560 display: flex;
561 align-items: center;
562 flex-wrap: wrap;
563 gap: var(--space-3);
564 margin-bottom: var(--space-4);
565 }
566 .issue-number {
567 font-size: var(--text-2xl);
568 font-weight: 600;
569 color: var(--color-text-muted);
570 white-space: nowrap;
571 }
572 .issue-detail-title {
573 font-size: var(--text-2xl);
574 font-weight: 600;
575 overflow-wrap: anywhere;
576 }
577 .issue-detail-meta-actions {
578 margin-left: auto;
579 display: flex;
580 gap: var(--space-2);
581 flex-shrink: 0;
582 }
583 .patch-author-meta {
584 display: flex;
585 align-items: center;
586 gap: var(--space-2);
587 font-size: var(--text-xs);
588 margin-top: calc(-1 * var(--space-4));
589 margin-bottom: var(--space-6);
590 }
591 .patch-author-label {
592 color: var(--color-text-muted);
593 }
594 .patch-author-identity {
595 font-family: monospace;
596 }
597 .timeline-item {
598 border: 1px solid var(--color-border);
599 border-radius: var(--radius-lg);
600 margin-bottom: var(--space-4);
601 overflow: hidden;
602 }
603 .timeline-author {
604 background: var(--color-bg-subtle);
605 padding: var(--space-3) var(--space-4);
606 font-size: var(--text-sm);
607 display: flex;
608 align-items: center;
609 justify-content: space-between;
610 gap: var(--space-3);
611 border-bottom: 1px solid var(--color-border);
612 overflow-wrap: anywhere;
613 }
614 .timeline-author time {
615 color: var(--color-text-muted);
616 font-size: var(--text-xs);
617 width: max-content;
618 }
619 .timeline-author-right {
620 margin-left: auto;
621 display: flex;
622 align-items: center;
623 gap: var(--space-2);
624 }
625 .edited-indicator {
626 color: var(--color-text-muted);
627 font-size: var(--text-xs);
628 cursor: default;
629 }
630
631 /* --- Avatars --- */
632 .avatar {
633 display: inline-flex;
634 border-radius: 4px;
635 overflow: hidden;
636 flex-shrink: 0;
637 vertical-align: middle;
638 }
639 .avatar-img {
640 width: 100%;
641 height: 100%;
642 object-fit: cover;
643 display: block;
644 color: transparent;
645 }
646 .avatar-placeholder {
647 display: inline-flex;
648 align-items: center;
649 justify-content: center;
650 border-radius: 4px;
651 background: var(--color-bg-inset);
652 color: var(--color-text-muted);
653 font-weight: 600;
654 flex-shrink: 0;
655 vertical-align: middle;
656 }
657 .avatar-settings {
658 display: flex;
659 align-items: flex-start;
660 gap: var(--space-5);
661 }
662 .avatar-actions {
663 display: flex;
664 flex-direction: column;
665 gap: var(--space-3);
666 }
667 .nav-user {
668 display: inline-flex;
669 align-items: center;
670 gap: var(--space-2);
671 font-size: var(--text-sm);
672 color: var(--color-text-muted);
673 }
674 .timeline-body {
675 padding: var(--space-4);
676 }
677 .timeline-item-new {
678 padding: var(--space-4);
679 }
680 .timeline-item-new .section-title {
681 font-size: var(--text-base);
682 border: none;
683 padding-bottom: 0;
684 }
685 /* Edit <details> (summary only) in .timeline-author; form is a sibling shown via :has() */
686 .timeline-author-right .inline-edit-details {
687 border: none;
688 }
689 .inline-edit-details .when-open {
690 display: none;
691 }
692 .inline-edit-details[open] .when-closed {
693 display: none;
694 }
695 .inline-edit-details[open] .when-open {
696 display: inline;
697 }
698 .inline-edit-form-area {
699 display: none;
700 border-top: 1px solid var(--color-border-muted);
701 }
702 .timeline-item:has(.inline-edit-details[open]) .inline-edit-form-area {
703 display: block;
704 }
705 .timeline-item:has(.inline-edit-details[open]) .timeline-body {
706 display: none;
707 }
708
709 /* Title edit in issue/patch header */
710 .issue-detail-header {
711 align-items: flex-start;
712 }
713 .title-with-edit {
714 flex: 1;
715 min-width: 16rem;
716 display: flex;
717 flex-direction: column;
718 gap: var(--space-1);
719 }
720 .title-edit-details {
721 border: none;
722 align-self: flex-start;
723 }
724 .title-with-edit:has(.title-edit-details[open]) .issue-detail-title {
725 display: none;
726 }
727 .title-with-edit:has(.title-edit-details[open]) > .title-edit-details {
728 display: none;
729 }
730 .title-edit-details > summary {
731 list-style: none;
732 }
733
734 .title-edit-form-area {
735 display: none;
736 }
737 .title-with-edit:has(.title-edit-details[open]) .title-edit-form-area {
738 display: flex;
739 flex: 1;
740 min-width: 0;
741 }
742 .title-edit-form {
743 display: flex;
744 flex-direction: column;
745 gap: var(--space-2);
746 flex: 1;
747 min-width: 0;
748 }
749 .title-edit-form .form-input {
750 min-width: 0;
751 width: 100%;
752 padding: var(--space-2) var(--space-3);
753 border: 1px solid var(--color-border);
754 border-radius: var(--radius-md);
755 background: var(--color-bg);
756 color: var(--color-text);
757 font-size: var(--text-sm);
758 }
759 .title-edit-form .form-input:focus {
760 outline: 2px solid var(--color-accent);
761 outline-offset: -1px;
762 border-color: var(--color-accent);
763 }
764 .title-edit-actions {
765 display: flex;
766 gap: var(--space-2);
767 }
768
769 .inline-edit-form {
770 padding: var(--space-4);
771 display: flex;
772 flex-direction: column;
773 gap: var(--space-3);
774 }
775
776 /* --- Reactions --- */
777 .reaction-bar {
778 display: flex;
779 flex-wrap: wrap;
780 gap: var(--space-2);
781 padding: var(--space-2) var(--space-4);
782 border-top: 1px solid var(--color-border-muted);
783 }
784 .reaction-form {
785 display: inline;
786 }
787 .reaction-btn {
788 display: inline-flex;
789 align-items: center;
790 gap: var(--space-1);
791 padding: var(--space-1) var(--space-3);
792 border: 1px solid var(--color-border);
793 border-radius: var(--radius-full);
794 background: var(--color-bg-subtle);
795 color: var(--color-text);
796 font-size: var(--text-sm);
797 cursor: pointer;
798 transition: background 0.1s;
799 }
800 .reaction-btn:hover {
801 background: var(--color-bg-inset);
802 }
803 .reaction-btn.reacted {
804 background: var(--color-accent-bg);
805 border-color: var(--color-accent);
806 }
807 .reaction-picker {
808 position: relative;
809 }
810 .reaction-add-btn {
811 display: inline-flex;
812 align-items: center;
813 justify-content: center;
814 width: 28px;
815 height: 28px;
816 border: 1px dashed var(--color-border);
817 border-radius: var(--radius-full);
818 background: transparent;
819 cursor: pointer;
820 font-size: var(--text-base);
821 color: var(--color-text-muted);
822 list-style: none;
823 }
824
825 .reaction-picker-dropdown {
826 position: absolute;
827 bottom: calc(100% + var(--space-2));
828 left: 0;
829 background: var(--color-bg);
830 border: 1px solid var(--color-border);
831 border-radius: var(--radius-lg);
832 padding: var(--space-2);
833 display: flex;
834 gap: var(--space-1);
835 z-index: 10;
836 }
837 .reaction-picker-btn {
838 background: none;
839 border: none;
840 font-size: 1.25rem;
841 cursor: pointer;
842 padding: var(--space-1);
843 border-radius: var(--radius-sm);
844 }
845 .reaction-picker-btn:hover {
846 background: var(--color-bg-inset);
847 }
848
849 /* --- Patch subview tabs --- */
850 .patch-tab-nav {
851 display: flex;
852 border-bottom: 1px solid var(--color-border);
853 margin-bottom: var(--space-6);
854 }
855 .tab-count {
856 display: inline-flex;
857 align-items: center;
858 justify-content: center;
859 min-width: 1.4em;
860 padding: 0 var(--space-1);
861 margin-left: var(--space-1);
862 font-size: var(--text-xs);
863 font-weight: 500;
864 background: var(--color-bg-inset);
865 border-radius: 999px;
866 color: var(--color-text-muted);
867 }
868
869 /* --- Patch apply status --- */
870 .apply-status {
871 margin: var(--space-4) 0;
872 }
873 .apply-result {
874 display: flex;
875 align-items: flex-start;
876 gap: var(--space-2);
877 padding: var(--space-3) var(--space-4);
878 border-radius: var(--radius-md);
879 font-size: var(--text-sm);
880 flex-direction: column;
881 }
882 .apply-result > div {
883 display: flex;
884 gap: var(--space-2);
885 align-items: center;
886 }
887 .apply-clean {
888 background: var(--color-success-bg);
889 color: var(--color-success);
890 border: 1px solid var(--color-success);
891 }
892 .apply-conflict {
893 background: var(--color-danger-bg);
894 color: var(--color-danger);
895 border: 1px solid var(--color-danger);
896 }
897 .apply-checking,
898 .apply-unknown {
899 color: var(--color-text-muted);
900 font-style: italic;
901 font-size: var(--text-sm);
902 }
903 .apply-output {
904 font-family: var(--font-mono);
905 font-size: var(--text-xs);
906 white-space: pre-wrap;
907 margin-top: var(--space-2);
908 padding: var(--space-2);
909 background: rgba(0, 0, 0, 0.05);
910 border-radius: var(--radius-sm);
911 width: 100%;
912 }
913 .patch-actions {
914 display: flex;
915 gap: var(--space-3);
916 margin: var(--space-4) 0;
917 flex-wrap: wrap;
918 }
919 .patch-card-title-row {
920 display: flex;
921 align-items: flex-start;
922 gap: var(--space-3);
923 justify-content: space-between;
924 margin-bottom: var(--space-3);
925 }
926 .patch-card-title-row .commit-card-subject {
927 margin-bottom: 0;
928 }
929 .patch-card-description {
930 margin-top: var(--space-4);
931 padding-top: var(--space-4);
932 border-top: 1px solid var(--color-border-muted);
933 }
934
935 /* --- Repo home layout --- */
936 .repo-home-layout {
937 display: grid;
938 gap: var(--space-8);
939 }
940 @media (min-width: 768px) {
941 .repo-home-layout {
942 grid-template-columns: 1fr 1fr;
943 }
944 }
945 .readme-section {
946 border: 1px solid var(--color-border);
947 border-radius: var(--radius-lg);
948 overflow: hidden;
949 }
950 .readme-header {
951 background: var(--color-bg-subtle);
952 padding: var(--space-3) var(--space-4);
953 font-size: var(--text-sm);
954 font-weight: 500;
955 border-bottom: 1px solid var(--color-border);
956 display: flex;
957 align-items: center;
958 justify-content: space-between;
959 }
960
961 /* --- Markdown body --- */
962 .markdown-body {
963 font-size: var(--text-sm);
964 line-height: 1.6;
965 color: var(--color-text);
966 }
967 .markdown-body h1,
968 .markdown-body h2,
969 .markdown-body h3,
970 .markdown-body h4,
971 .markdown-body h5,
972 .markdown-body h6 {
973 margin-top: var(--space-6);
974 margin-bottom: var(--space-3);
975 }
976 .markdown-body p {
977 margin-bottom: var(--space-4);
978 }
979 .markdown-body a {
980 color: var(--color-link);
981 }
982 .markdown-body code {
983 background: var(--color-bg-inset);
984 padding: 0.1em 0.3em;
985 border-radius: var(--radius-sm);
986 font-size: 0.9em;
987 }
988 .markdown-body pre {
989 background: var(--color-bg-subtle);
990 border: 1px solid var(--color-border);
991 border-radius: var(--radius-md);
992 padding: var(--space-4);
993 overflow: auto;
994 margin-bottom: var(--space-4);
995 }
996 .markdown-body pre code {
997 background: none;
998 padding: 0;
999 }
1000 .markdown-body ul,
1001 .markdown-body ol {
1002 padding-left: var(--space-6);
1003 margin-bottom: var(--space-4);
1004 }
1005 .markdown-body ul {
1006 list-style: disc;
1007 }
1008 .markdown-body ol {
1009 list-style: decimal;
1010 }
1011 .markdown-body li {
1012 margin-bottom: var(--space-1);
1013 }
1014 .markdown-body blockquote {
1015 border-left: 3px solid var(--color-border);
1016 padding-left: var(--space-4);
1017 color: var(--color-text-muted);
1018 margin: var(--space-4) 0;
1019 }
1020 .markdown-body table {
1021 width: 100%;
1022 border-collapse: collapse;
1023 margin-bottom: var(--space-4);
1024 }
1025 .markdown-body th,
1026 .markdown-body td {
1027 padding: var(--space-2) var(--space-3);
1028 border: 1px solid var(--color-border);
1029 }
1030 .markdown-body th {
1031 background: var(--color-bg-subtle);
1032 font-weight: 600;
1033 }
1034 .markdown-body hr {
1035 border: none;
1036 border-top: 1px solid var(--color-border);
1037 margin: var(--space-6) 0;
1038 }
1039 .markdown-body img {
1040 max-width: 100%;
1041 border-radius: var(--radius-md);
1042 }
1043 .markdown-body details {
1044 margin-bottom: var(--space-4);
1045 }
1046 .markdown-body summary {
1047 cursor: pointer;
1048 font-weight: 500;
1049 }
1050 .readme-section .markdown-body,
1051 .file-blob-body .markdown-body {
1052 padding: var(--space-4);
1053 }
1054
1055 /* --- Code setup block --- */
1056 .code-setup {
1057 background: var(--color-bg-subtle);
1058 border: 1px solid var(--color-border);
1059 border-radius: var(--radius-lg);
1060 padding: var(--space-4);
1061 font-size: var(--text-sm);
1062 margin-top: var(--space-4);
1063 overflow: auto;
1064 text-align: left;
1065 }
1066 .code-plain {
1067 background: var(--color-bg-subtle);
1068 padding: var(--space-4);
1069 overflow: auto;
1070 font-size: var(--text-sm);
1071 line-height: 1.6;
1072 }
1073
1074 /* --- Search row (search form + sort select) --- */
1075 .search-row {
1076 display: flex;
1077 align-items: center;
1078 gap: var(--space-3);
1079 margin-bottom: var(--space-5);
1080 }
1081 .search-form {
1082 flex: 1;
1083 }
1084 .repo-sort-select {
1085 padding: var(--space-1) var(--space-2);
1086 padding-right: var(--space-5);
1087 border: 1px solid var(--color-border);
1088 border-radius: var(--radius-md);
1089 background: var(--color-bg-subtle);
1090 font-size: var(--text-sm);
1091 color: var(--color-text);
1092 cursor: pointer;
1093 appearance: auto;
1094 }
1095 .repo-sort-select:hover {
1096 border-color: var(--color-text-muted);
1097 }
1098 .repo-sort-select:focus {
1099 outline: 2px solid var(--color-accent);
1100 outline-offset: -1px;
1101 }
1102 .search-input-wrap {
1103 display: flex;
1104 gap: var(--space-2);
1105 }
1106 .search-input {
1107 flex: 1;
1108 padding: var(--space-2) var(--space-3);
1109 border: 1px solid var(--color-border);
1110 border-radius: var(--radius-md);
1111 background: var(--color-bg);
1112 color: var(--color-text);
1113 font-size: var(--text-sm);
1114 }
1115 .search-input:focus {
1116 outline: 2px solid var(--color-accent);
1117 outline-offset: -1px;
1118 border-color: var(--color-accent);
1119 }
1120
1121 /* --- Issue close bar --- */
1122 .issue-close-bar {
1123 display: flex;
1124 justify-content: flex-end;
1125 padding: var(--space-3) 0;
1126 border-top: 1px solid var(--color-border-muted);
1127 margin-top: var(--space-2);
1128 }
1129
1130 /* --- Auth divider --- */
1131 .auth-divider {
1132 display: flex;
1133 align-items: center;
1134 gap: var(--space-3);
1135 margin: var(--space-4) 0;
1136 color: var(--color-text-muted);
1137 font-size: var(--text-sm);
1138 }
1139 .auth-divider::before,
1140 .auth-divider::after {
1141 content: "";
1142 flex: 1;
1143 height: 1px;
1144 background: var(--color-border);
1145 }
1146
1147 /* --- Passkey UI in settings --- */
1148 .passkey-actions {
1149 display: flex;
1150 flex-direction: column;
1151 gap: var(--space-3);
1152 align-items: flex-start;
1153 margin-top: var(--space-3);
1154 }
1155 .passkey-status {
1156 font-size: var(--text-sm);
1157 }
1158
1159 /* --- Danger zone --- */
1160 .danger-zone {
1161 margin-top: var(--space-8);
1162 }
1163 .danger-title {
1164 color: var(--color-danger);
1165 border-bottom-color: var(--color-danger);
1166 }
1167 .danger-card {
1168 border-color: var(--color-danger);
1169 background: var(--color-danger-bg);
1170 }
1171 .danger-item {
1172 display: flex;
1173 align-items: center;
1174 justify-content: space-between;
1175 gap: var(--space-4);
1176 flex-wrap: wrap;
1177 }
1178 .danger-item p {
1179 margin: var(--space-1) 0 0;
1180 }
1181 .btn-danger {
1182 background: var(--color-danger);
1183 border-color: transparent;
1184 color: #fff;
1185 }
1186 .btn-danger:hover {
1187 background: color-mix(in srgb, var(--color-danger) 85%, #000);
1188 }
1189
1190 /* --- Release list items --- */
1191 .release-item-header {
1192 display: flex;
1193 gap: var(--space-3);
1194 align-items: flex-start;
1195 }
1196 .release-item-main {
1197 flex: 1;
1198 min-width: 0;
1199 }
1200 .release-item-title {
1201 font-size: var(--text-lg);
1202 font-weight: 700;
1203 text-decoration: none;
1204 color: var(--color-text);
1205 display: block;
1206 margin-bottom: var(--space-1);
1207 }
1208 .release-item-title:hover {
1209 color: var(--color-link);
1210 }
1211 .release-item-meta {
1212 display: flex;
1213 flex-wrap: wrap;
1214 gap: var(--space-3);
1215 align-items: center;
1216 font-size: var(--text-xs);
1217 color: var(--color-text-muted);
1218 }
1219 .release-item-date {
1220 display: flex;
1221 flex-direction: column;
1222 align-items: flex-end;
1223 gap: var(--space-2);
1224 font-size: var(--text-xs);
1225 color: var(--color-text-muted);
1226 white-space: nowrap;
1227 flex-shrink: 0;
1228 }
1229
1230 /* --- Release notes preview in list --- */
1231 .release-notes-section {
1232 margin-top: var(--space-3);
1233 }
1234 .release-notes-label {
1235 font-size: var(--text-xs);
1236 font-weight: 600;
1237 color: var(--color-text-muted);
1238 text-transform: uppercase;
1239 letter-spacing: 0.05em;
1240 margin-bottom: var(--space-2);
1241 }
1242 .notes-expand > summary {
1243 list-style: none;
1244 cursor: pointer;
1245 outline: none;
1246 }
1247
1248 .notes-preview {
1249 max-height: calc(5 * 1.6em);
1250 overflow: hidden;
1251 position: relative;
1252 white-space: pre-wrap;
1253 font-size: var(--text-sm);
1254 color: var(--color-text);
1255 line-height: 1.6;
1256 word-break: break-word;
1257 margin-bottom: var(--space-1);
1258 }
1259 .notes-preview::after {
1260 content: "";
1261 position: absolute;
1262 bottom: 0;
1263 left: 0;
1264 right: 0;
1265 height: 2.5em;
1266 background: linear-gradient(transparent, var(--color-bg));
1267 pointer-events: none;
1268 }
1269 .notes-expand[open] .notes-preview {
1270 display: none;
1271 }
1272 .notes-full {
1273 padding-top: var(--space-3);
1274 padding-bottom: var(--space-1);
1275 }
1276 .notes-expand[open] {
1277 display: flex;
1278 flex-direction: column;
1279 }
1280 .notes-expand[open] > summary {
1281 order: 1;
1282 }
1283 .notes-expand[open] > .notes-full {
1284 order: 0;
1285 }
1286 .notes-toggle-label {
1287 display: inline-block;
1288 font-size: var(--text-xs);
1289 color: var(--color-link);
1290 margin-top: var(--space-1);
1291 }
1292 .notes-toggle-label:hover {
1293 text-decoration: underline;
1294 }
1295 .notes-toggle-label::before {
1296 content: "Show more ↓";
1297 }
1298 .notes-expand[open] .notes-toggle-label::before {
1299 content: "Show less ↑";
1300 }
1301
1302 /* --- Release detail --- */
1303 .release-detail {
1304 padding: var(--space-6) 0;
1305 }
1306 .release-header {
1307 margin-bottom: var(--space-6);
1308 }
1309 .release-notes {
1310 margin-bottom: var(--space-6);
1311 }
1312 .release-assets {
1313 margin-bottom: var(--space-6);
1314 }
1315 .release-assets-heading {
1316 font-size: var(--text-base);
1317 font-weight: 600;
1318 margin-bottom: var(--space-3);
1319 }
1320 .asset-list {
1321 border: 1px solid var(--color-border);
1322 border-radius: var(--radius-lg);
1323 overflow: hidden;
1324 }
1325 .asset-item {
1326 display: flex;
1327 align-items: center;
1328 gap: var(--space-4);
1329 padding: var(--space-3) var(--space-4);
1330 border-bottom: 1px solid var(--color-border-muted);
1331 font-size: var(--text-sm);
1332 }
1333 .asset-item:last-child {
1334 border-bottom: none;
1335 }
1336 .asset-name {
1337 flex: 1;
1338 color: var(--color-link);
1339 text-decoration: none;
1340 font-family: var(--font-mono);
1341 font-size: var(--text-xs);
1342 }
1343 .asset-name:hover {
1344 text-decoration: underline;
1345 }
1346 .asset-name-pending {
1347 color: var(--color-text-muted);
1348 cursor: default;
1349 }
1350 .asset-item-pending {
1351 opacity: 0.6;
1352 }
1353 .asset-size,
1354 .asset-meta {
1355 color: var(--color-text-muted);
1356 font-size: var(--text-xs);
1357 white-space: nowrap;
1358 }
1359 .release-back {
1360 margin-top: var(--space-4);
1361 display: flex;
1362 gap: var(--space-3);
1363 align-items: center;
1364 justify-content: space-between;
1365 }
1366
1367 /* ============================================================
1368 Pagination
1369 ============================================================ */
1370 .commit-verify-hint {
1371 margin-bottom: var(--space-4);
1372 font-size: var(--text-xs);
1373 color: var(--color-text-muted);
1374 }
1375 .commit-verify-hint code {
1376 word-break: break-all;
1377 }
1378 .commit-cursor-nav {
1379 display: flex;
1380 justify-content: space-between;
1381 border-top: 1px solid var(--color-border);
1382 margin-top: var(--space-2);
1383 padding: var(--space-4) 0 var(--space-2);
1384 }
1385
1386 .commit-cursor-prev {
1387 flex: 1;
1388 }
1389 .commit-cursor-next {
1390 flex: 1;
1391 text-align: right;
1392 }
1393
1394 .pagination {
1395 display: grid;
1396 grid-template-columns: 1fr auto 1fr;
1397 align-items: center;
1398 border-top: 1px solid var(--color-border);
1399 margin-top: var(--space-2);
1400 padding: var(--space-4) 0 var(--space-2);
1401 }
1402
1403 .pagination-prev {
1404 justify-self: start;
1405 }
1406 .pagination-next {
1407 justify-self: end;
1408 }
1409
1410 .pagination-info {
1411 justify-self: center;
1412 font-size: var(--text-sm);
1413 color: var(--color-text-muted);
1414 }
1415
1416 .pagination-btn {
1417 display: inline-flex;
1418 align-items: center;
1419 gap: var(--space-1);
1420 padding: var(--space-1) var(--space-3);
1421 border: 1px solid var(--color-border);
1422 border-radius: var(--radius-md);
1423 font-size: var(--text-sm);
1424 font-weight: 500;
1425 text-decoration: none;
1426 color: var(--color-text);
1427 background: var(--color-bg-subtle);
1428 transition:
1429 background 0.1s,
1430 border-color 0.1s;
1431 white-space: nowrap;
1432 }
1433
1434 .pagination-btn:hover {
1435 background: var(--color-bg-inset);
1436 border-color: var(--color-border);
1437 color: var(--color-text);
1438 text-decoration: none;
1439 }
1440
1441 /* Settings */
1442 .theme-options {
1443 display: flex;
1444 gap: var(--space-4);
1445 margin-bottom: var(--space-4);
1446 flex-wrap: wrap;
1447 }
1448 .theme-option {
1449 display: flex;
1450 align-items: center;
1451 gap: var(--space-2);
1452 cursor: pointer;
1453 font-size: var(--text-sm);
1454 }
1455 .settings-form {
1456 display: flex;
1457 flex-direction: column;
1458 gap: var(--space-4);
1459 }
1460 .passkey-list {
1461 display: flex;
1462 flex-direction: column;
1463 gap: var(--space-2);
1464 margin-bottom: var(--space-4);
1465 }
1466 .passkey-item {
1467 display: flex;
1468 align-items: center;
1469 gap: var(--space-3);
1470 padding: var(--space-2) 0;
1471 border-bottom: 1px solid var(--color-border-muted);
1472 font-size: var(--text-sm);
1473 }
1474 .passkey-item:last-child {
1475 border-bottom: none;
1476 }
1477 .passkey-date {
1478 flex: 1;
1479 color: var(--color-text-muted);
1480 }
1481 .queue-bulk-actions {
1482 display: flex;
1483 gap: var(--space-2);
1484 margin-bottom: var(--space-4);
1485 }
1486 .queue-list {
1487 list-style: none;
1488 padding: 0;
1489 margin: 0;
1490 max-height: 32rem;
1491 overflow-y: auto;
1492 }
1493 .queue-item {
1494 display: flex;
1495 align-items: flex-start;
1496 justify-content: space-between;
1497 gap: var(--space-4);
1498 padding: var(--space-3) 0;
1499 border-top: 1px solid var(--color-border-muted);
1500 font-size: var(--text-sm);
1501 }
1502 .queue-item-meta {
1503 display: flex;
1504 flex-direction: column;
1505 gap: var(--space-1);
1506 min-width: 0;
1507 }
1508 .queue-item-header {
1509 display: flex;
1510 align-items: baseline;
1511 gap: var(--space-2);
1512 }
1513 .queue-item-date {
1514 color: var(--color-text-muted);
1515 font-size: var(--text-xs);
1516 }
1517 .queue-item-answer {
1518 margin: 0;
1519 color: var(--color-text-muted);
1520 font-size: var(--text-xs);
1521 white-space: pre-wrap;
1522 word-break: break-word;
1523 }
1524 .queue-item-actions {
1525 display: flex;
1526 gap: var(--space-2);
1527 flex-shrink: 0;
1528 }
1529 .ssh-key-info {
1530 flex: 1;
1531 display: flex;
1532 flex-direction: column;
1533 gap: var(--space-1);
1534 min-width: 0;
1535 }
1536 .ssh-key-name {
1537 font-weight: 500;
1538 }
1539 .ssh-key-fingerprint {
1540 font-family: var(--font-mono);
1541 font-size: var(--text-xs);
1542 overflow: hidden;
1543 text-overflow: ellipsis;
1544 white-space: nowrap;
1545 }
1546 .form-textarea {
1547 resize: vertical;
1548 min-height: 4.5rem;
1549 font-family: var(--font-mono);
1550 font-size: var(--text-sm);
1551 }
1552
1553 /* Clone popup */
1554 .clone-popup-details {
1555 position: relative;
1556 display: inline-block;
1557 }
1558 .clone-popup-details > summary {
1559 list-style: none;
1560 }
1561 .timeline-author-right .inline-edit-details > summary {
1562 list-style: none;
1563 }
1564 .clone-popup {
1565 position: absolute;
1566 right: 1rem;
1567 top: calc(100% + var(--space-2));
1568 background: var(--color-bg);
1569 border: 1px solid var(--color-border);
1570 border-radius: var(--radius-lg);
1571 padding: var(--space-3);
1572 min-width: 22rem;
1573 z-index: 100;
1574 box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);
1575 display: flex;
1576 flex-direction: column;
1577 gap: var(--space-2);
1578 }
1579 .clone-url-row {
1580 display: flex;
1581 align-items: center;
1582 gap: var(--space-2);
1583 }
1584 .clone-url-label {
1585 font-size: var(--text-xs);
1586 font-weight: 600;
1587 color: var(--color-text-muted);
1588 text-transform: uppercase;
1589 letter-spacing: 0.05em;
1590 min-width: 2.75rem;
1591 }
1592 .clone-url-input {
1593 flex: 1;
1594 font-family: var(--font-mono);
1595 font-size: var(--text-sm);
1596 background: var(--color-bg-subtle);
1597 border: 1px solid var(--color-border-muted);
1598 border-radius: var(--radius-md);
1599 padding: var(--space-1) var(--space-2);
1600 color: var(--color-text);
1601 cursor: text;
1602 min-width: 0;
1603 }
1604
1605 /* User list */
1606 .user-list {
1607 display: flex;
1608 flex-direction: column;
1609 gap: var(--space-2);
1610 margin-bottom: var(--space-6);
1611 }
1612 .user-item {
1613 display: flex;
1614 align-items: center;
1615 gap: var(--space-3);
1616 padding: var(--space-2) 0;
1617 border-bottom: 1px solid var(--color-border-muted);
1618 font-size: var(--text-sm);
1619 }
1620 .user-item:last-child {
1621 border-bottom: none;
1622 }
1623 .user-name {
1624 font-weight: 500;
1625 flex: 1;
1626 }
1627 .user-date {
1628 color: var(--color-text-muted);
1629 font-size: var(--text-xs);
1630 }
1631
1632 /* Labels */
1633 .label-badge {
1634 display: inline-block;
1635 padding: 0 var(--space-2);
1636 border-radius: 2em;
1637 font-size: var(--text-xs);
1638 font-weight: 500;
1639 line-height: 1.6;
1640 word-break: break-all;
1641 }
1642 .issue-labels {
1643 display: flex;
1644 flex-wrap: wrap;
1645 gap: var(--space-1);
1646 margin-bottom: var(--space-2);
1647 }
1648 .issue-labels-row {
1649 display: flex;
1650 flex-wrap: wrap;
1651 align-items: center;
1652 gap: var(--space-2);
1653 padding: var(--space-2) 0 var(--space-3);
1654 }
1655 .label-badge-wrap {
1656 display: inline-flex;
1657 align-items: center;
1658 gap: var(--space-1);
1659 }
1660 .label-remove-form {
1661 display: inline;
1662 }
1663 .label-remove-btn {
1664 background: none;
1665 border: none;
1666 cursor: pointer;
1667 padding: 0 2px;
1668 font-size: var(--text-sm);
1669 line-height: 1;
1670 color: var(--color-text-muted);
1671 opacity: 0.7;
1672 }
1673 .label-remove-btn:hover {
1674 opacity: 1;
1675 }
1676 .label-add-inline-form {
1677 display: inline-flex;
1678 align-items: center;
1679 gap: var(--space-2);
1680 }
1681 .label-select {
1682 font-size: var(--text-sm);
1683 padding: var(--space-1) var(--space-2);
1684 border: 1px solid var(--color-border);
1685 border-radius: var(--radius-md);
1686 background: var(--color-bg);
1687 color: var(--color-text);
1688 height: 2rem;
1689 }
1690 .label-checkbox-list {
1691 display: flex;
1692 flex-wrap: wrap;
1693 gap: var(--space-2);
1694 margin-top: var(--space-1);
1695 }
1696 .label-checkbox-item {
1697 display: inline-flex;
1698 align-items: center;
1699 gap: var(--space-1);
1700 cursor: pointer;
1701 }
1702 .label-settings-list {
1703 display: flex;
1704 flex-direction: column;
1705 margin-bottom: var(--space-4);
1706 max-height: 24rem;
1707 overflow-y: auto;
1708 }
1709 .label-settings-item {
1710 display: flex;
1711 align-items: center;
1712 gap: var(--space-3);
1713 padding: var(--space-2) 0;
1714 border-bottom: 1px solid var(--color-border-muted);
1715 font-size: var(--text-sm);
1716 }
1717 .label-settings-item:last-child {
1718 border-bottom: none;
1719 }
1720 .label-settings-swatch {
1721 width: 12px;
1722 height: 12px;
1723 border-radius: 50%;
1724 flex-shrink: 0;
1725 border: 1px solid rgba(0, 0, 0, 0.15);
1726 }
1727 .label-settings-name {
1728 flex: 1;
1729 font-weight: 500;
1730 }
1731 .label-add-form {
1732 display: flex;
1733 align-items: center;
1734 gap: var(--space-2);
1735 }
1736 .label-name-input {
1737 flex: 1;
1738 min-width: 0;
1739 padding: var(--space-2) var(--space-3);
1740 border: 1px solid var(--color-border);
1741 border-radius: var(--radius-md);
1742 background: var(--color-bg);
1743 color: var(--color-text);
1744 font-size: var(--text-sm);
1745 height: 2rem;
1746 box-sizing: border-box;
1747 }
1748 .label-name-input:focus {
1749 outline: 2px solid var(--color-accent);
1750 outline-offset: -1px;
1751 border-color: var(--color-accent);
1752 }
1753 .label-color-swatch-label {
1754 flex-shrink: 0;
1755 cursor: pointer;
1756 display: block;
1757 line-height: 0;
1758 }
1759 .label-color-input {
1760 display: block;
1761 width: 2rem;
1762 height: 2rem;
1763 cursor: pointer;
1764 appearance: none;
1765 box-sizing: border-box;
1766 clip-path: circle(50%);
1767 border: none;
1768 }
1769
1770 /* Label filter (details/summary popup) */
1771 .list-header-actions {
1772 display: flex;
1773 align-items: center;
1774 gap: var(--space-2);
1775 flex-shrink: 0;
1776 }
1777 .label-filter {
1778 position: relative;
1779 }
1780 .label-filter-popup {
1781 position: absolute;
1782 right: 0;
1783 top: calc(100% + var(--space-1));
1784 z-index: 10;
1785 background: var(--color-bg);
1786 border: 1px solid var(--color-border);
1787 border-radius: var(--radius-lg);
1788 padding: var(--space-3);
1789 min-width: 180px;
1790 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12);
1791 }
1792 .label-filter-list {
1793 display: flex;
1794 flex-direction: column;
1795 gap: var(--space-2);
1796 margin-bottom: var(--space-3);
1797 max-height: 16rem;
1798 overflow-y: auto;
1799 }
1800 .label-filter-item {
1801 display: flex;
1802 align-items: center;
1803 gap: var(--space-2);
1804 cursor: pointer;
1805 font-size: var(--text-sm);
1806 }
1807 .label-filter-actions {
1808 display: flex;
1809 gap: var(--space-2);
1810 }
1811
1812 /* --- list-heading (inside list-header) --- */
1813 .list-heading {
1814 font-size: var(--text-lg);
1815 font-weight: 600;
1816 margin: 0;
1817 }
1818
1819 /* --- Branch / Tag ref list --- */
1820 .ref-list {
1821 border: 1px solid var(--color-border);
1822 border-top: none;
1823 border-radius: 0 0 var(--radius-lg) var(--radius-lg);
1824 }
1825 .ref-item {
1826 padding: var(--space-3) var(--space-4);
1827 border-bottom: 1px solid var(--color-border-muted);
1828 }
1829 .ref-item:last-child {
1830 border-bottom: none;
1831 }
1832 .ref-name-row {
1833 display: flex;
1834 align-items: center;
1835 gap: var(--space-2);
1836 margin-bottom: var(--space-1);
1837 }
1838 .ref-name {
1839 font-size: var(--text-sm);
1840 font-weight: 600;
1841 color: var(--color-text);
1842 text-decoration: none;
1843 }
1844 .ref-name:hover {
1845 color: var(--color-link);
1846 }
1847 .ref-meta-row {
1848 display: flex;
1849 align-items: center;
1850 flex-wrap: wrap;
1851 gap: var(--space-2) var(--space-3);
1852 font-size: var(--text-xs);
1853 color: var(--color-text-muted);
1854 min-width: 0;
1855 }
1856 .ref-author {
1857 white-space: nowrap;
1858 }
1859 .ref-hash {
1860 font-family: var(--font-mono);
1861 font-size: var(--text-xs);
1862 color: var(--color-link);
1863 text-decoration: none;
1864 background: var(--color-bg-inset);
1865 padding: 1px var(--space-2);
1866 border-radius: var(--radius-sm);
1867 white-space: nowrap;
1868 flex-shrink: 0;
1869 }
1870 .ref-hash:hover {
1871 text-decoration: underline;
1872 }
1873 .ref-subject {
1874 flex: 1;
1875 min-width: 60px;
1876 overflow: hidden;
1877 text-overflow: ellipsis;
1878 white-space: nowrap;
1879 }
1880 .ref-date {
1881 white-space: nowrap;
1882 flex-shrink: 0;
1883 }
1884 .ref-actions {
1885 display: flex;
1886 align-items: center;
1887 gap: var(--space-2);
1888 margin-left: auto;
1889 flex-shrink: 0;
1890 }
1891
1892 /* --- Inline confirm-details (for row-level actions) --- */
1893 .confirm-details-inline {
1894 position: relative;
1895 display: inline-block;
1896 }
1897
1898 /* --- Popup form (for new branch / new tag popups) --- */
1899 .confirm-popup-form {
1900 min-width: 260px;
1901 }
1902 .popup-form {
1903 display: flex;
1904 flex-direction: column;
1905 gap: var(--space-3);
1906 }
1907 .popup-form .form-group {
1908 margin-bottom: 0;
1909 }
1910 .popup-form input[type="text"] {
1911 width: 100%;
1912 box-sizing: border-box;
1913 }
1914
1915 /* --- Confirm warning (tag linked to release) --- */
1916 .confirm-warning {
1917 font-size: var(--text-xs);
1918 color: var(--color-warning);
1919 margin: 0 0 var(--space-2);
1920 }
1921
1922 /* --- Tree toolbar actions group --- */
1923 .tree-toolbar-actions {
1924 display: flex;
1925 align-items: center;
1926 gap: var(--space-2);
1927 }
1928}
1929