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-toggle {
721 display: none;
722 }
723 .title-edit-form-area {
724 display: none;
725 }
726 .title-edit-toggle:checked + .title-with-edit .issue-detail-title {
727 display: none;
728 }
729 .title-edit-open {
730 align-self: flex-start;
731 }
732 .title-edit-toggle:checked + .title-with-edit .title-edit-open {
733 display: none;
734 }
735 .title-edit-toggle:checked + .title-with-edit .title-edit-form-area {
736 display: flex;
737 flex: 1;
738 min-width: 0;
739 }
740 .title-edit-form {
741 display: flex;
742 flex-direction: column;
743 gap: var(--space-2);
744 flex: 1;
745 min-width: 0;
746 }
747 .title-edit-form .form-input {
748 min-width: 0;
749 width: 100%;
750 padding: var(--space-2) var(--space-3);
751 border: 1px solid var(--color-border);
752 border-radius: var(--radius-md);
753 background: var(--color-bg);
754 color: var(--color-text);
755 font-size: var(--text-sm);
756 }
757 .title-edit-form .form-input:focus {
758 outline: 2px solid var(--color-accent);
759 outline-offset: -1px;
760 border-color: var(--color-accent);
761 }
762 .title-edit-actions {
763 display: flex;
764 gap: var(--space-2);
765 }
766
767 .inline-edit-form {
768 padding: var(--space-4);
769 display: flex;
770 flex-direction: column;
771 gap: var(--space-3);
772 }
773
774 /* --- Reactions --- */
775 .reaction-bar {
776 display: flex;
777 flex-wrap: wrap;
778 gap: var(--space-2);
779 padding: var(--space-2) var(--space-4);
780 border-top: 1px solid var(--color-border-muted);
781 }
782 .reaction-form {
783 display: inline;
784 }
785 .reaction-btn {
786 display: inline-flex;
787 align-items: center;
788 gap: var(--space-1);
789 padding: var(--space-1) var(--space-3);
790 border: 1px solid var(--color-border);
791 border-radius: var(--radius-full);
792 background: var(--color-bg-subtle);
793 color: var(--color-text);
794 font-size: var(--text-sm);
795 cursor: pointer;
796 transition: background 0.1s;
797 }
798 .reaction-btn:hover {
799 background: var(--color-bg-inset);
800 }
801 .reaction-btn.reacted {
802 background: var(--color-accent-bg);
803 border-color: var(--color-accent);
804 }
805 .reaction-picker {
806 position: relative;
807 }
808 .reaction-add-btn {
809 display: inline-flex;
810 align-items: center;
811 justify-content: center;
812 width: 28px;
813 height: 28px;
814 border: 1px dashed var(--color-border);
815 border-radius: var(--radius-full);
816 background: transparent;
817 cursor: pointer;
818 font-size: var(--text-base);
819 color: var(--color-text-muted);
820 list-style: none;
821 }
822
823 .reaction-picker-dropdown {
824 position: absolute;
825 bottom: calc(100% + var(--space-2));
826 left: 0;
827 background: var(--color-bg);
828 border: 1px solid var(--color-border);
829 border-radius: var(--radius-lg);
830 padding: var(--space-2);
831 display: flex;
832 gap: var(--space-1);
833 z-index: 10;
834 }
835 .reaction-picker-btn {
836 background: none;
837 border: none;
838 font-size: 1.25rem;
839 cursor: pointer;
840 padding: var(--space-1);
841 border-radius: var(--radius-sm);
842 }
843 .reaction-picker-btn:hover {
844 background: var(--color-bg-inset);
845 }
846
847 /* --- Patch subview tabs --- */
848 .patch-tab-nav {
849 display: flex;
850 border-bottom: 1px solid var(--color-border);
851 margin-bottom: var(--space-6);
852 }
853 .tab-count {
854 display: inline-flex;
855 align-items: center;
856 justify-content: center;
857 min-width: 1.4em;
858 padding: 0 var(--space-1);
859 margin-left: var(--space-1);
860 font-size: var(--text-xs);
861 font-weight: 500;
862 background: var(--color-bg-inset);
863 border-radius: 999px;
864 color: var(--color-text-muted);
865 }
866
867 /* --- Patch apply status --- */
868 .apply-status {
869 margin: var(--space-4) 0;
870 }
871 .apply-result {
872 display: flex;
873 align-items: flex-start;
874 gap: var(--space-2);
875 padding: var(--space-3) var(--space-4);
876 border-radius: var(--radius-md);
877 font-size: var(--text-sm);
878 flex-direction: column;
879 }
880 .apply-result > div {
881 display: flex;
882 gap: var(--space-2);
883 align-items: center;
884 }
885 .apply-clean {
886 background: var(--color-success-bg);
887 color: var(--color-success);
888 border: 1px solid var(--color-success);
889 }
890 .apply-conflict {
891 background: var(--color-danger-bg);
892 color: var(--color-danger);
893 border: 1px solid var(--color-danger);
894 }
895 .apply-checking,
896 .apply-unknown {
897 color: var(--color-text-muted);
898 font-style: italic;
899 font-size: var(--text-sm);
900 }
901 .apply-output {
902 font-family: var(--font-mono);
903 font-size: var(--text-xs);
904 white-space: pre-wrap;
905 margin-top: var(--space-2);
906 padding: var(--space-2);
907 background: rgba(0, 0, 0, 0.05);
908 border-radius: var(--radius-sm);
909 width: 100%;
910 }
911 .patch-actions {
912 display: flex;
913 gap: var(--space-3);
914 margin: var(--space-4) 0;
915 flex-wrap: wrap;
916 }
917 .patch-card-title-row {
918 display: flex;
919 align-items: flex-start;
920 gap: var(--space-3);
921 justify-content: space-between;
922 margin-bottom: var(--space-3);
923 }
924 .patch-card-title-row .commit-card-subject {
925 margin-bottom: 0;
926 }
927 .patch-card-description {
928 margin-top: var(--space-4);
929 padding-top: var(--space-4);
930 border-top: 1px solid var(--color-border-muted);
931 }
932
933 /* --- Repo home layout --- */
934 .repo-home-layout {
935 display: grid;
936 gap: var(--space-8);
937 }
938 @media (min-width: 768px) {
939 .repo-home-layout {
940 grid-template-columns: 1fr 1fr;
941 }
942 }
943 .readme-section {
944 border: 1px solid var(--color-border);
945 border-radius: var(--radius-lg);
946 overflow: hidden;
947 }
948 .readme-header {
949 background: var(--color-bg-subtle);
950 padding: var(--space-3) var(--space-4);
951 font-size: var(--text-sm);
952 font-weight: 500;
953 border-bottom: 1px solid var(--color-border);
954 display: flex;
955 align-items: center;
956 justify-content: space-between;
957 }
958
959 /* --- Markdown body --- */
960 .markdown-body {
961 font-size: var(--text-sm);
962 line-height: 1.6;
963 color: var(--color-text);
964 }
965 .markdown-body h1,
966 .markdown-body h2,
967 .markdown-body h3,
968 .markdown-body h4,
969 .markdown-body h5,
970 .markdown-body h6 {
971 margin-top: var(--space-6);
972 margin-bottom: var(--space-3);
973 }
974 .markdown-body p {
975 margin-bottom: var(--space-4);
976 }
977 .markdown-body a {
978 color: var(--color-link);
979 }
980 .markdown-body code {
981 background: var(--color-bg-inset);
982 padding: 0.1em 0.3em;
983 border-radius: var(--radius-sm);
984 font-size: 0.9em;
985 }
986 .markdown-body pre {
987 background: var(--color-bg-subtle);
988 border: 1px solid var(--color-border);
989 border-radius: var(--radius-md);
990 padding: var(--space-4);
991 overflow: auto;
992 margin-bottom: var(--space-4);
993 }
994 .markdown-body pre code {
995 background: none;
996 padding: 0;
997 }
998 .markdown-body ul,
999 .markdown-body ol {
1000 padding-left: var(--space-6);
1001 margin-bottom: var(--space-4);
1002 }
1003 .markdown-body ul {
1004 list-style: disc;
1005 }
1006 .markdown-body ol {
1007 list-style: decimal;
1008 }
1009 .markdown-body li {
1010 margin-bottom: var(--space-1);
1011 }
1012 .markdown-body blockquote {
1013 border-left: 3px solid var(--color-border);
1014 padding-left: var(--space-4);
1015 color: var(--color-text-muted);
1016 margin: var(--space-4) 0;
1017 }
1018 .markdown-body table {
1019 width: 100%;
1020 border-collapse: collapse;
1021 margin-bottom: var(--space-4);
1022 }
1023 .markdown-body th,
1024 .markdown-body td {
1025 padding: var(--space-2) var(--space-3);
1026 border: 1px solid var(--color-border);
1027 }
1028 .markdown-body th {
1029 background: var(--color-bg-subtle);
1030 font-weight: 600;
1031 }
1032 .markdown-body hr {
1033 border: none;
1034 border-top: 1px solid var(--color-border);
1035 margin: var(--space-6) 0;
1036 }
1037 .markdown-body img {
1038 max-width: 100%;
1039 border-radius: var(--radius-md);
1040 }
1041 .markdown-body details {
1042 margin-bottom: var(--space-4);
1043 }
1044 .markdown-body summary {
1045 cursor: pointer;
1046 font-weight: 500;
1047 }
1048 .readme-section .markdown-body,
1049 .file-blob-body .markdown-body {
1050 padding: var(--space-4);
1051 }
1052
1053 /* --- Code setup block --- */
1054 .code-setup {
1055 background: var(--color-bg-subtle);
1056 border: 1px solid var(--color-border);
1057 border-radius: var(--radius-lg);
1058 padding: var(--space-4);
1059 font-size: var(--text-sm);
1060 margin-top: var(--space-4);
1061 overflow: auto;
1062 text-align: left;
1063 }
1064 .code-plain {
1065 background: var(--color-bg-subtle);
1066 padding: var(--space-4);
1067 overflow: auto;
1068 font-size: var(--text-sm);
1069 line-height: 1.6;
1070 }
1071
1072 /* --- Search row (search form + sort select) --- */
1073 .search-row {
1074 display: flex;
1075 align-items: center;
1076 gap: var(--space-3);
1077 margin-bottom: var(--space-5);
1078 }
1079 .search-form {
1080 flex: 1;
1081 }
1082 .repo-sort-select {
1083 padding: var(--space-1) var(--space-2);
1084 padding-right: var(--space-5);
1085 border: 1px solid var(--color-border);
1086 border-radius: var(--radius-md);
1087 background: var(--color-bg-subtle);
1088 font-size: var(--text-sm);
1089 color: var(--color-text);
1090 cursor: pointer;
1091 appearance: auto;
1092 }
1093 .repo-sort-select:hover {
1094 border-color: var(--color-text-muted);
1095 }
1096 .repo-sort-select:focus {
1097 outline: 2px solid var(--color-accent);
1098 outline-offset: -1px;
1099 }
1100 .search-input-wrap {
1101 display: flex;
1102 gap: var(--space-2);
1103 }
1104 .search-input {
1105 flex: 1;
1106 padding: var(--space-2) var(--space-3);
1107 border: 1px solid var(--color-border);
1108 border-radius: var(--radius-md);
1109 background: var(--color-bg);
1110 color: var(--color-text);
1111 font-size: var(--text-sm);
1112 }
1113 .search-input:focus {
1114 outline: 2px solid var(--color-accent);
1115 outline-offset: -1px;
1116 border-color: var(--color-accent);
1117 }
1118
1119 /* --- Issue close bar --- */
1120 .issue-close-bar {
1121 display: flex;
1122 justify-content: flex-end;
1123 padding: var(--space-3) 0;
1124 border-top: 1px solid var(--color-border-muted);
1125 margin-top: var(--space-2);
1126 }
1127
1128 /* --- Auth divider --- */
1129 .auth-divider {
1130 display: flex;
1131 align-items: center;
1132 gap: var(--space-3);
1133 margin: var(--space-4) 0;
1134 color: var(--color-text-muted);
1135 font-size: var(--text-sm);
1136 }
1137 .auth-divider::before,
1138 .auth-divider::after {
1139 content: "";
1140 flex: 1;
1141 height: 1px;
1142 background: var(--color-border);
1143 }
1144
1145 /* --- Passkey UI in settings --- */
1146 .passkey-actions {
1147 display: flex;
1148 flex-direction: column;
1149 gap: var(--space-3);
1150 align-items: flex-start;
1151 margin-top: var(--space-3);
1152 }
1153 .passkey-status {
1154 font-size: var(--text-sm);
1155 }
1156
1157 /* --- Danger zone --- */
1158 .danger-zone {
1159 margin-top: var(--space-8);
1160 }
1161 .danger-title {
1162 color: var(--color-danger);
1163 border-bottom-color: var(--color-danger);
1164 }
1165 .danger-card {
1166 border-color: var(--color-danger);
1167 background: var(--color-danger-bg);
1168 }
1169 .danger-item {
1170 display: flex;
1171 align-items: center;
1172 justify-content: space-between;
1173 gap: var(--space-4);
1174 flex-wrap: wrap;
1175 }
1176 .danger-item p {
1177 margin: var(--space-1) 0 0;
1178 }
1179 .btn-danger {
1180 background: var(--color-danger);
1181 border-color: transparent;
1182 color: #fff;
1183 }
1184 .btn-danger:hover {
1185 background: color-mix(in srgb, var(--color-danger) 85%, #000);
1186 }
1187
1188 /* --- Release list items --- */
1189 .release-item-header {
1190 display: flex;
1191 gap: var(--space-3);
1192 align-items: flex-start;
1193 }
1194 .release-item-main {
1195 flex: 1;
1196 min-width: 0;
1197 }
1198 .release-item-title {
1199 font-size: var(--text-lg);
1200 font-weight: 700;
1201 text-decoration: none;
1202 color: var(--color-text);
1203 display: block;
1204 margin-bottom: var(--space-1);
1205 }
1206 .release-item-title:hover {
1207 color: var(--color-link);
1208 }
1209 .release-item-meta {
1210 display: flex;
1211 flex-wrap: wrap;
1212 gap: var(--space-3);
1213 align-items: center;
1214 font-size: var(--text-xs);
1215 color: var(--color-text-muted);
1216 }
1217 .release-item-date {
1218 display: flex;
1219 flex-direction: column;
1220 align-items: flex-end;
1221 gap: var(--space-2);
1222 font-size: var(--text-xs);
1223 color: var(--color-text-muted);
1224 white-space: nowrap;
1225 flex-shrink: 0;
1226 }
1227
1228 /* --- Release notes preview in list --- */
1229 .release-notes-section {
1230 margin-top: var(--space-3);
1231 }
1232 .release-notes-label {
1233 font-size: var(--text-xs);
1234 font-weight: 600;
1235 color: var(--color-text-muted);
1236 text-transform: uppercase;
1237 letter-spacing: 0.05em;
1238 margin-bottom: var(--space-2);
1239 }
1240 .notes-expand > summary {
1241 list-style: none;
1242 cursor: pointer;
1243 outline: none;
1244 }
1245
1246 .notes-preview {
1247 max-height: calc(5 * 1.6em);
1248 overflow: hidden;
1249 position: relative;
1250 white-space: pre-wrap;
1251 font-size: var(--text-sm);
1252 color: var(--color-text);
1253 line-height: 1.6;
1254 word-break: break-word;
1255 margin-bottom: var(--space-1);
1256 }
1257 .notes-preview::after {
1258 content: "";
1259 position: absolute;
1260 bottom: 0;
1261 left: 0;
1262 right: 0;
1263 height: 2.5em;
1264 background: linear-gradient(transparent, var(--color-bg));
1265 pointer-events: none;
1266 }
1267 .notes-expand[open] .notes-preview {
1268 display: none;
1269 }
1270 .notes-full {
1271 padding-top: var(--space-3);
1272 padding-bottom: var(--space-1);
1273 }
1274 .notes-expand[open] {
1275 display: flex;
1276 flex-direction: column;
1277 }
1278 .notes-expand[open] > summary {
1279 order: 1;
1280 }
1281 .notes-expand[open] > .notes-full {
1282 order: 0;
1283 }
1284 .notes-toggle-label {
1285 display: inline-block;
1286 font-size: var(--text-xs);
1287 color: var(--color-link);
1288 margin-top: var(--space-1);
1289 }
1290 .notes-toggle-label:hover {
1291 text-decoration: underline;
1292 }
1293 .notes-toggle-label::before {
1294 content: "Show more ↓";
1295 }
1296 .notes-expand[open] .notes-toggle-label::before {
1297 content: "Show less ↑";
1298 }
1299
1300 /* --- Release detail --- */
1301 .release-detail {
1302 padding: var(--space-6) 0;
1303 }
1304 .release-header {
1305 margin-bottom: var(--space-6);
1306 }
1307 .release-notes {
1308 margin-bottom: var(--space-6);
1309 }
1310 .release-assets {
1311 margin-bottom: var(--space-6);
1312 }
1313 .release-assets-heading {
1314 font-size: var(--text-base);
1315 font-weight: 600;
1316 margin-bottom: var(--space-3);
1317 }
1318 .asset-list {
1319 border: 1px solid var(--color-border);
1320 border-radius: var(--radius-lg);
1321 overflow: hidden;
1322 }
1323 .asset-item {
1324 display: flex;
1325 align-items: center;
1326 gap: var(--space-4);
1327 padding: var(--space-3) var(--space-4);
1328 border-bottom: 1px solid var(--color-border-muted);
1329 font-size: var(--text-sm);
1330 }
1331 .asset-item:last-child {
1332 border-bottom: none;
1333 }
1334 .asset-name {
1335 flex: 1;
1336 color: var(--color-link);
1337 text-decoration: none;
1338 font-family: var(--font-mono);
1339 font-size: var(--text-xs);
1340 }
1341 .asset-name:hover {
1342 text-decoration: underline;
1343 }
1344 .asset-name-pending {
1345 color: var(--color-text-muted);
1346 cursor: default;
1347 }
1348 .asset-item-pending {
1349 opacity: 0.6;
1350 }
1351 .asset-size,
1352 .asset-meta {
1353 color: var(--color-text-muted);
1354 font-size: var(--text-xs);
1355 white-space: nowrap;
1356 }
1357 .release-back {
1358 margin-top: var(--space-4);
1359 display: flex;
1360 gap: var(--space-3);
1361 align-items: center;
1362 justify-content: space-between;
1363 }
1364
1365 /* ============================================================
1366 Pagination
1367 ============================================================ */
1368 .commit-verify-hint {
1369 margin-bottom: var(--space-4);
1370 font-size: var(--text-xs);
1371 color: var(--color-text-muted);
1372 }
1373 .commit-verify-hint code {
1374 word-break: break-all;
1375 }
1376 .commit-cursor-nav {
1377 display: flex;
1378 justify-content: space-between;
1379 border-top: 1px solid var(--color-border);
1380 margin-top: var(--space-2);
1381 padding: var(--space-4) 0 var(--space-2);
1382 }
1383
1384 .commit-cursor-prev {
1385 flex: 1;
1386 }
1387 .commit-cursor-next {
1388 flex: 1;
1389 text-align: right;
1390 }
1391
1392 .pagination {
1393 display: grid;
1394 grid-template-columns: 1fr auto 1fr;
1395 align-items: center;
1396 border-top: 1px solid var(--color-border);
1397 margin-top: var(--space-2);
1398 padding: var(--space-4) 0 var(--space-2);
1399 }
1400
1401 .pagination-prev {
1402 justify-self: start;
1403 }
1404 .pagination-next {
1405 justify-self: end;
1406 }
1407
1408 .pagination-info {
1409 justify-self: center;
1410 font-size: var(--text-sm);
1411 color: var(--color-text-muted);
1412 }
1413
1414 .pagination-btn {
1415 display: inline-flex;
1416 align-items: center;
1417 gap: var(--space-1);
1418 padding: var(--space-1) var(--space-3);
1419 border: 1px solid var(--color-border);
1420 border-radius: var(--radius-md);
1421 font-size: var(--text-sm);
1422 font-weight: 500;
1423 text-decoration: none;
1424 color: var(--color-text);
1425 background: var(--color-bg-subtle);
1426 transition:
1427 background 0.1s,
1428 border-color 0.1s;
1429 white-space: nowrap;
1430 }
1431
1432 .pagination-btn:hover {
1433 background: var(--color-bg-inset);
1434 border-color: var(--color-border);
1435 color: var(--color-text);
1436 text-decoration: none;
1437 }
1438
1439 /* Settings */
1440 .theme-options {
1441 display: flex;
1442 gap: var(--space-4);
1443 margin-bottom: var(--space-4);
1444 flex-wrap: wrap;
1445 }
1446 .theme-option {
1447 display: flex;
1448 align-items: center;
1449 gap: var(--space-2);
1450 cursor: pointer;
1451 font-size: var(--text-sm);
1452 }
1453 .settings-form {
1454 display: flex;
1455 flex-direction: column;
1456 gap: var(--space-4);
1457 }
1458 .passkey-list {
1459 display: flex;
1460 flex-direction: column;
1461 gap: var(--space-2);
1462 margin-bottom: var(--space-4);
1463 }
1464 .passkey-item {
1465 display: flex;
1466 align-items: center;
1467 gap: var(--space-3);
1468 padding: var(--space-2) 0;
1469 border-bottom: 1px solid var(--color-border-muted);
1470 font-size: var(--text-sm);
1471 }
1472 .passkey-item:last-child {
1473 border-bottom: none;
1474 }
1475 .passkey-date {
1476 flex: 1;
1477 color: var(--color-text-muted);
1478 }
1479 .queue-bulk-actions {
1480 display: flex;
1481 gap: var(--space-2);
1482 margin-bottom: var(--space-4);
1483 }
1484 .queue-list {
1485 list-style: none;
1486 padding: 0;
1487 margin: 0;
1488 max-height: 32rem;
1489 overflow-y: auto;
1490 }
1491 .queue-item {
1492 display: flex;
1493 align-items: flex-start;
1494 justify-content: space-between;
1495 gap: var(--space-4);
1496 padding: var(--space-3) 0;
1497 border-top: 1px solid var(--color-border-muted);
1498 font-size: var(--text-sm);
1499 }
1500 .queue-item-meta {
1501 display: flex;
1502 flex-direction: column;
1503 gap: var(--space-1);
1504 min-width: 0;
1505 }
1506 .queue-item-header {
1507 display: flex;
1508 align-items: baseline;
1509 gap: var(--space-2);
1510 }
1511 .queue-item-date {
1512 color: var(--color-text-muted);
1513 font-size: var(--text-xs);
1514 }
1515 .queue-item-answer {
1516 margin: 0;
1517 color: var(--color-text-muted);
1518 font-size: var(--text-xs);
1519 white-space: pre-wrap;
1520 word-break: break-word;
1521 }
1522 .queue-item-actions {
1523 display: flex;
1524 gap: var(--space-2);
1525 flex-shrink: 0;
1526 }
1527 .ssh-key-info {
1528 flex: 1;
1529 display: flex;
1530 flex-direction: column;
1531 gap: var(--space-1);
1532 min-width: 0;
1533 }
1534 .ssh-key-name {
1535 font-weight: 500;
1536 }
1537 .ssh-key-fingerprint {
1538 font-family: var(--font-mono);
1539 font-size: var(--text-xs);
1540 overflow: hidden;
1541 text-overflow: ellipsis;
1542 white-space: nowrap;
1543 }
1544 .form-textarea {
1545 resize: vertical;
1546 min-height: 4.5rem;
1547 font-family: var(--font-mono);
1548 font-size: var(--text-sm);
1549 }
1550
1551 /* Clone popup */
1552 .clone-popup-details {
1553 position: relative;
1554 display: inline-block;
1555 }
1556 .clone-popup-details > summary {
1557 list-style: none;
1558 }
1559 .timeline-author-right .inline-edit-details > summary {
1560 list-style: none;
1561 }
1562 .clone-popup {
1563 position: absolute;
1564 right: 1rem;
1565 top: calc(100% + var(--space-2));
1566 background: var(--color-bg);
1567 border: 1px solid var(--color-border);
1568 border-radius: var(--radius-lg);
1569 padding: var(--space-3);
1570 min-width: 22rem;
1571 z-index: 100;
1572 box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);
1573 display: flex;
1574 flex-direction: column;
1575 gap: var(--space-2);
1576 }
1577 .clone-url-row {
1578 display: flex;
1579 align-items: center;
1580 gap: var(--space-2);
1581 }
1582 .clone-url-label {
1583 font-size: var(--text-xs);
1584 font-weight: 600;
1585 color: var(--color-text-muted);
1586 text-transform: uppercase;
1587 letter-spacing: 0.05em;
1588 min-width: 2.75rem;
1589 }
1590 .clone-url-input {
1591 flex: 1;
1592 font-family: var(--font-mono);
1593 font-size: var(--text-sm);
1594 background: var(--color-bg-subtle);
1595 border: 1px solid var(--color-border-muted);
1596 border-radius: var(--radius-md);
1597 padding: var(--space-1) var(--space-2);
1598 color: var(--color-text);
1599 cursor: text;
1600 min-width: 0;
1601 }
1602
1603 /* User list */
1604 .user-list {
1605 display: flex;
1606 flex-direction: column;
1607 gap: var(--space-2);
1608 margin-bottom: var(--space-6);
1609 }
1610 .user-item {
1611 display: flex;
1612 align-items: center;
1613 gap: var(--space-3);
1614 padding: var(--space-2) 0;
1615 border-bottom: 1px solid var(--color-border-muted);
1616 font-size: var(--text-sm);
1617 }
1618 .user-item:last-child {
1619 border-bottom: none;
1620 }
1621 .user-name {
1622 font-weight: 500;
1623 flex: 1;
1624 }
1625 .user-date {
1626 color: var(--color-text-muted);
1627 font-size: var(--text-xs);
1628 }
1629
1630 /* Labels */
1631 .label-badge {
1632 display: inline-block;
1633 padding: 0 var(--space-2);
1634 border-radius: 2em;
1635 font-size: var(--text-xs);
1636 font-weight: 500;
1637 line-height: 1.6;
1638 word-break: break-all;
1639 }
1640 .issue-labels {
1641 display: flex;
1642 flex-wrap: wrap;
1643 gap: var(--space-1);
1644 margin-bottom: var(--space-2);
1645 }
1646 .issue-labels-row {
1647 display: flex;
1648 flex-wrap: wrap;
1649 align-items: center;
1650 gap: var(--space-2);
1651 padding: var(--space-2) 0 var(--space-3);
1652 }
1653 .label-badge-wrap {
1654 display: inline-flex;
1655 align-items: center;
1656 gap: var(--space-1);
1657 }
1658 .label-remove-form {
1659 display: inline;
1660 }
1661 .label-remove-btn {
1662 background: none;
1663 border: none;
1664 cursor: pointer;
1665 padding: 0 2px;
1666 font-size: var(--text-sm);
1667 line-height: 1;
1668 color: var(--color-text-muted);
1669 opacity: 0.7;
1670 }
1671 .label-remove-btn:hover {
1672 opacity: 1;
1673 }
1674 .label-add-inline-form {
1675 display: inline-flex;
1676 align-items: center;
1677 gap: var(--space-2);
1678 }
1679 .label-select {
1680 font-size: var(--text-sm);
1681 padding: var(--space-1) var(--space-2);
1682 border: 1px solid var(--color-border);
1683 border-radius: var(--radius-md);
1684 background: var(--color-bg);
1685 color: var(--color-text);
1686 height: 2rem;
1687 }
1688 .label-checkbox-list {
1689 display: flex;
1690 flex-wrap: wrap;
1691 gap: var(--space-2);
1692 margin-top: var(--space-1);
1693 }
1694 .label-checkbox-item {
1695 display: inline-flex;
1696 align-items: center;
1697 gap: var(--space-1);
1698 cursor: pointer;
1699 }
1700 .label-settings-list {
1701 display: flex;
1702 flex-direction: column;
1703 margin-bottom: var(--space-4);
1704 max-height: 24rem;
1705 overflow-y: auto;
1706 }
1707 .label-settings-item {
1708 display: flex;
1709 align-items: center;
1710 gap: var(--space-3);
1711 padding: var(--space-2) 0;
1712 border-bottom: 1px solid var(--color-border-muted);
1713 font-size: var(--text-sm);
1714 }
1715 .label-settings-item:last-child {
1716 border-bottom: none;
1717 }
1718 .label-settings-swatch {
1719 width: 12px;
1720 height: 12px;
1721 border-radius: 50%;
1722 flex-shrink: 0;
1723 border: 1px solid rgba(0, 0, 0, 0.15);
1724 }
1725 .label-settings-name {
1726 flex: 1;
1727 font-weight: 500;
1728 }
1729 .label-add-form {
1730 display: flex;
1731 align-items: center;
1732 gap: var(--space-2);
1733 }
1734 .label-name-input {
1735 flex: 1;
1736 min-width: 0;
1737 padding: var(--space-2) var(--space-3);
1738 border: 1px solid var(--color-border);
1739 border-radius: var(--radius-md);
1740 background: var(--color-bg);
1741 color: var(--color-text);
1742 font-size: var(--text-sm);
1743 height: 2rem;
1744 box-sizing: border-box;
1745 }
1746 .label-name-input:focus {
1747 outline: 2px solid var(--color-accent);
1748 outline-offset: -1px;
1749 border-color: var(--color-accent);
1750 }
1751 .label-color-swatch-label {
1752 flex-shrink: 0;
1753 cursor: pointer;
1754 display: block;
1755 width: 2rem;
1756 height: 2rem;
1757 border-radius: 50%;
1758 overflow: hidden;
1759 line-height: 0;
1760 }
1761 .label-color-input {
1762 display: block;
1763 width: 150%;
1764 height: 150%;
1765 margin: -25%;
1766 cursor: pointer;
1767 appearance: none;
1768 border: none;
1769 padding: 0;
1770 }
1771
1772 /* Label filter (details/summary popup) */
1773 .list-header-actions {
1774 display: flex;
1775 align-items: center;
1776 gap: var(--space-2);
1777 flex-shrink: 0;
1778 }
1779 .label-filter {
1780 position: relative;
1781 }
1782 .label-filter-popup {
1783 position: absolute;
1784 right: 0;
1785 top: calc(100% + var(--space-1));
1786 z-index: 10;
1787 background: var(--color-bg);
1788 border: 1px solid var(--color-border);
1789 border-radius: var(--radius-lg);
1790 padding: var(--space-3);
1791 min-width: 180px;
1792 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12);
1793 }
1794 .label-filter-list {
1795 display: flex;
1796 flex-direction: column;
1797 gap: var(--space-2);
1798 margin-bottom: var(--space-3);
1799 max-height: 16rem;
1800 overflow-y: auto;
1801 }
1802 .label-filter-item {
1803 display: flex;
1804 align-items: center;
1805 gap: var(--space-2);
1806 cursor: pointer;
1807 font-size: var(--text-sm);
1808 }
1809 .label-filter-actions {
1810 display: flex;
1811 gap: var(--space-2);
1812 }
1813
1814 /* --- list-heading (inside list-header) --- */
1815 .list-heading {
1816 font-size: var(--text-lg);
1817 font-weight: 600;
1818 margin: 0;
1819 }
1820
1821 /* --- Branch / Tag ref list --- */
1822 .ref-list {
1823 border: 1px solid var(--color-border);
1824 border-top: none;
1825 border-radius: 0 0 var(--radius-lg) var(--radius-lg);
1826 }
1827 .ref-item {
1828 padding: var(--space-3) var(--space-4);
1829 border-bottom: 1px solid var(--color-border-muted);
1830 }
1831 .ref-item:last-child {
1832 border-bottom: none;
1833 }
1834 .ref-name-row {
1835 display: flex;
1836 align-items: center;
1837 gap: var(--space-2);
1838 margin-bottom: var(--space-1);
1839 }
1840 .ref-name {
1841 font-size: var(--text-sm);
1842 font-weight: 600;
1843 color: var(--color-text);
1844 text-decoration: none;
1845 }
1846 .ref-name:hover {
1847 color: var(--color-link);
1848 }
1849 .ref-meta-row {
1850 display: flex;
1851 align-items: center;
1852 flex-wrap: wrap;
1853 gap: var(--space-2) var(--space-3);
1854 font-size: var(--text-xs);
1855 color: var(--color-text-muted);
1856 min-width: 0;
1857 }
1858 .ref-author {
1859 white-space: nowrap;
1860 }
1861 .ref-hash {
1862 font-family: var(--font-mono);
1863 font-size: var(--text-xs);
1864 color: var(--color-link);
1865 text-decoration: none;
1866 background: var(--color-bg-inset);
1867 padding: 1px var(--space-2);
1868 border-radius: var(--radius-sm);
1869 white-space: nowrap;
1870 flex-shrink: 0;
1871 }
1872 .ref-hash:hover {
1873 text-decoration: underline;
1874 }
1875 .ref-subject {
1876 flex: 1;
1877 min-width: 60px;
1878 overflow: hidden;
1879 text-overflow: ellipsis;
1880 white-space: nowrap;
1881 }
1882 .ref-date {
1883 white-space: nowrap;
1884 flex-shrink: 0;
1885 }
1886 .ref-actions {
1887 display: flex;
1888 align-items: center;
1889 gap: var(--space-2);
1890 margin-left: auto;
1891 flex-shrink: 0;
1892 }
1893
1894 /* --- Inline confirm-details (for row-level actions) --- */
1895 .confirm-details-inline {
1896 position: relative;
1897 display: inline-block;
1898 }
1899
1900 /* --- Popup form (for new branch / new tag popups) --- */
1901 .confirm-popup-form {
1902 min-width: 260px;
1903 }
1904 .popup-form {
1905 display: flex;
1906 flex-direction: column;
1907 gap: var(--space-3);
1908 }
1909 .popup-form .form-group {
1910 margin-bottom: 0;
1911 }
1912 .popup-form input[type="text"] {
1913 width: 100%;
1914 box-sizing: border-box;
1915 }
1916
1917 /* --- Confirm warning (tag linked to release) --- */
1918 .confirm-warning {
1919 font-size: var(--text-xs);
1920 color: var(--color-warning);
1921 margin: 0 0 var(--space-2);
1922 }
1923
1924 /* --- Tree toolbar actions group --- */
1925 .tree-toolbar-actions {
1926 display: flex;
1927 align-items: center;
1928 gap: var(--space-2);
1929 }
1930}
1931