main.css
Raw
1/* View Transitions */
2@view-transition {
3 navigation: auto;
4}
5
6.site-nav {
7 view-transition-name: site-nav;
8}
9.repo-header {
10 view-transition-name: repo-header;
11}
12.breadcrumb {
13 view-transition-name: breadcrumb;
14}
15
16/* ============================================================
17 @layer reset
18 ============================================================ */
19@layer reset {
20 *,
21 *::before,
22 *::after {
23 box-sizing: border-box;
24 margin: 0;
25 padding: 0;
26 }
27 html {
28 -webkit-text-size-adjust: 100%;
29 }
30 body {
31 min-height: 100dvh;
32 min-width: 500px;
33 }
34 img,
35 video {
36 max-width: 100%;
37 height: auto;
38 }
39 button,
40 input,
41 textarea,
42 select {
43 font: inherit;
44 }
45 a {
46 color: inherit;
47 }
48 ul,
49 ol {
50 list-style: none;
51 }
52 h1,
53 h2,
54 h3,
55 h4,
56 h5,
57 h6 {
58 font-weight: 600;
59 line-height: 1.2;
60 }
61 pre,
62 code {
63 font-family: var(--font-mono);
64 }
65}
66
67/* ============================================================
68 @layer tokens
69 ============================================================ */
70@layer tokens {
71 :root {
72 /* Colors — light */
73 --color-bg: #ffffff;
74 --color-bg-subtle: #f6f8fa;
75 --color-bg-inset: #eef0f2;
76 --color-border: #d0d7de;
77 --color-border-muted: #e4e7eb;
78 --color-text: #1f2328;
79 --color-text-muted: #656d76;
80 --color-link: #0969da;
81 --color-link-hover: #0550ae;
82
83 --color-accent: #fd7e14;
84 --color-accent-bg: #fff3cd;
85
86 --color-success: #1a7f37;
87 --color-success-bg: #dafbe1;
88 --color-danger: #cf222e;
89 --color-danger-bg: #ffebe9;
90 --color-warning: #9a6700;
91 --color-warning-bg: #fff8c5;
92 --color-merged: #8250df;
93 --color-merged-bg: #fbefff;
94
95 /* Typography */
96 --font-sans:
97 system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
98 --font-mono:
99 ui-monospace, "Cascadia Code", "Source Code Pro", monospace;
100
101 --text-xs: 0.75rem;
102 --text-sm: 0.875rem;
103 --text-base: 1rem;
104 --text-lg: 1.125rem;
105 --text-xl: 1.25rem;
106 --text-2xl: 1.5rem;
107 --text-3xl: 1.875rem;
108
109 /* Spacing */
110 --space-1: 0.25rem;
111 --space-2: 0.5rem;
112 --space-3: 0.75rem;
113 --space-4: 1rem;
114 --space-5: 1.25rem;
115 --space-6: 1.5rem;
116 --space-8: 2rem;
117 --space-10: 2.5rem;
118 --space-12: 3rem;
119 --space-16: 4rem;
120
121 /* Border radius */
122 --radius-sm: 4px;
123 --radius-md: 6px;
124 --radius-lg: 8px;
125 --radius-full: 9999px;
126
127 /* Shadows */
128 --shadow-sm: 0 1px 0 rgba(27, 31, 36, 0.04);
129 --shadow-md: 0 3px 6px rgba(140, 149, 159, 0.15);
130 --shadow-lg: 0 8px 24px rgba(140, 149, 159, 0.2);
131 }
132
133 @media (prefers-color-scheme: dark) {
134 :root {
135 --color-bg: #0d1117;
136 --color-bg-subtle: #161b22;
137 --color-bg-inset: #1c2128;
138 --color-border: #30363d;
139 --color-border-muted: #21262d;
140 --color-text: #e6edf3;
141 --color-text-muted: #7d8590;
142 --color-link: #58a6ff;
143 --color-link-hover: #79c0ff;
144
145 --color-accent: #f0883e;
146 --color-accent-bg: #3d2f00;
147
148 --color-success: #3fb950;
149 --color-success-bg: #0d2b19;
150 --color-danger: #f85149;
151 --color-danger-bg: #2d1419;
152 --color-warning: #d29922;
153 --color-warning-bg: #2c2000;
154 --color-merged: #bc8cff;
155 --color-merged-bg: #1e0b3e;
156 }
157 }
158
159 /* Explicit theme overrides — applied via data-theme attribute set by cookie */
160 :root[data-theme="dark"] {
161 --color-bg: #0d1117;
162 --color-bg-subtle: #161b22;
163 --color-bg-inset: #1c2128;
164 --color-border: #30363d;
165 --color-border-muted: #21262d;
166 --color-text: #e6edf3;
167 --color-text-muted: #7d8590;
168 --color-link: #58a6ff;
169 --color-link-hover: #79c0ff;
170 --color-accent: #f0883e;
171 --color-accent-bg: #3d2f00;
172 --color-success: #3fb950;
173 --color-success-bg: #0d2b19;
174 --color-danger: #f85149;
175 --color-danger-bg: #2d1419;
176 --color-warning: #d29922;
177 --color-warning-bg: #2c2000;
178 --color-merged: #bc8cff;
179 --color-merged-bg: #1e0b3e;
180 }
181 :root[data-theme="light"] {
182 --color-bg: #ffffff;
183 --color-bg-subtle: #f6f8fa;
184 --color-bg-inset: #eef0f2;
185 --color-border: #d0d7de;
186 --color-border-muted: #e4e7eb;
187 --color-text: #1f2328;
188 --color-text-muted: #656d76;
189 --color-link: #0969da;
190 --color-link-hover: #0550ae;
191 --color-accent: #fd7e14;
192 --color-accent-bg: #fff3cd;
193 --color-success: #1a7f37;
194 --color-success-bg: #dafbe1;
195 --color-danger: #cf222e;
196 --color-danger-bg: #ffebe9;
197 --color-warning: #9a6700;
198 --color-warning-bg: #fff8c5;
199 --color-merged: #8250df;
200 --color-merged-bg: #fbefff;
201 }
202}
203
204/* ============================================================
205 @layer layout
206 ============================================================ */
207@layer layout {
208 body {
209 font-family: var(--font-sans);
210 font-size: var(--text-base);
211 color: var(--color-text);
212 background: var(--color-bg);
213 display: grid;
214 grid-template-rows: auto 1fr auto;
215 min-height: 100dvh;
216 }
217
218 .site-header {
219 background: var(--color-bg-subtle);
220 border-bottom: 1px solid var(--color-border);
221 position: sticky;
222 top: 0;
223 z-index: 100;
224 }
225
226 .site-nav {
227 max-width: 1200px;
228 margin: 0 auto;
229 padding: var(--space-3) var(--space-4);
230 display: flex;
231 align-items: center;
232 gap: var(--space-4);
233 }
234
235 .site-logo {
236 display: flex;
237 align-items: center;
238 gap: var(--space-2);
239 text-decoration: none;
240 font-weight: 700;
241 font-size: var(--text-lg);
242 color: var(--color-text);
243 }
244
245 .logo-icon {
246 width: 1.6em;
247 height: 1.6em;
248 display: block;
249 flex-shrink: 0;
250 }
251
252 .nav-links {
253 margin-left: auto;
254 display: flex;
255 align-items: center;
256 gap: var(--space-3);
257 }
258
259 .nav-user {
260 font-size: var(--text-sm);
261 color: var(--color-text-muted);
262 }
263
264 .site-main {
265 padding: var(--space-8) var(--space-4);
266 min-width: 0;
267 }
268
269 .site-footer {
270 text-align: center;
271 padding: var(--space-6) var(--space-4);
272 font-size: var(--text-sm);
273 color: var(--color-text-muted);
274 border-top: 1px solid var(--color-border);
275 }
276
277 .container {
278 max-width: 1000px;
279 margin: 0 auto;
280 overflow-x: clip;
281 }
282
283 .container-narrow {
284 max-width: 680px;
285 }
286
287 .inline-form {
288 display: inline;
289 }
290
291 /* --- Two-step delete confirmation --- */
292 .confirm-details {
293 position: relative;
294 display: inline-block;
295 }
296 .confirm-details > summary {
297 list-style: none;
298 }
299 .confirm-details > summary::-webkit-details-marker {
300 display: none;
301 }
302 .confirm-popup {
303 position: absolute;
304 right: 0;
305 top: calc(100% + var(--space-1));
306 background: var(--color-bg);
307 border: 1px solid var(--color-border);
308 border-radius: var(--radius-md);
309 padding: var(--space-3) var(--space-4);
310 display: flex;
311 align-items: center;
312 gap: var(--space-3);
313 white-space: nowrap;
314 z-index: 100;
315 font-size: var(--text-sm);
316 color: var(--color-text-muted);
317 }
318}
319
320/* ============================================================
321 @layer components
322 ============================================================ */
323@layer components {
324 /* --- Buttons --- */
325 .btn {
326 display: inline-flex;
327 align-items: center;
328 gap: var(--space-2);
329 padding: var(--space-2) var(--space-4);
330 border: 1px solid var(--color-border);
331 border-radius: var(--radius-md);
332 font-size: var(--text-sm);
333 font-weight: 500;
334 text-decoration: none;
335 cursor: pointer;
336 background: var(--color-bg-subtle);
337 color: var(--color-text);
338 transition:
339 background 0.1s,
340 border-color 0.1s;
341 white-space: nowrap;
342 }
343 .btn:hover {
344 background: var(--color-bg-inset);
345 border-color: var(--color-border);
346 }
347 .btn:disabled {
348 opacity: 0.5;
349 cursor: not-allowed;
350 }
351 .btn-primary {
352 background: var(--color-accent);
353 border-color: transparent;
354 color: #fff;
355 }
356 .btn-primary:hover {
357 background: color-mix(in srgb, var(--color-accent) 82%, #000);
358 }
359 .btn-secondary {
360 background: var(--color-bg-subtle);
361 border-color: var(--color-border);
362 }
363 .btn-ghost {
364 background: transparent;
365 border-color: transparent;
366 }
367 .btn-ghost:hover {
368 background: var(--color-bg-inset);
369 }
370 /* Keep ghost transparent even when combined with size variants */
371 .btn-ghost.btn-xs,
372 .btn-ghost.btn-sm {
373 background: transparent;
374 border-color: transparent;
375 }
376 .btn-ghost.btn-xs:hover,
377 .btn-ghost.btn-sm:hover {
378 background: var(--color-bg-inset);
379 }
380 .btn-sm {
381 padding: var(--space-1) var(--space-3);
382 font-size: var(--text-xs);
383 }
384 .btn-block {
385 width: 100%;
386 justify-content: center;
387 }
388
389 /* --- Forms --- */
390 .form-group {
391 display: flex;
392 flex-direction: column;
393 gap: var(--space-2);
394 margin-bottom: var(--space-4);
395 }
396 .form-group label {
397 font-size: var(--text-sm);
398 font-weight: 500;
399 color: var(--color-text);
400 }
401 .form-group input:not([type="file"]):not([type="checkbox"]),
402 .form-group textarea,
403 .form-group select {
404 padding: var(--space-2) var(--space-3);
405 border: 1px solid var(--color-border);
406 border-radius: var(--radius-md);
407 background: var(--color-bg);
408 color: var(--color-text);
409 font-size: var(--text-sm);
410 }
411 .form-group input:not([type="file"]):not([type="checkbox"]):focus,
412 .form-group textarea:focus {
413 outline: 2px solid var(--color-accent);
414 outline-offset: -1px;
415 border-color: var(--color-accent);
416 }
417 .form-group input[type="file"] {
418 font-size: var(--text-sm);
419 color: var(--color-text);
420 padding: 0;
421 border: none;
422 background: none;
423 }
424 .form-group textarea {
425 resize: vertical;
426 min-height: 120px;
427 }
428 .form-success {
429 background: var(--color-success-bg);
430 color: var(--color-success);
431 border: 1px solid var(--color-success);
432 border-radius: var(--radius-md);
433 padding: var(--space-3) var(--space-4);
434 font-size: var(--text-sm);
435 margin-bottom: var(--space-4);
436 }
437 .form-hint {
438 font-size: var(--text-sm);
439 color: var(--color-text-muted);
440 margin: 0;
441 }
442 .form-error {
443 background: var(--color-danger-bg);
444 color: var(--color-danger);
445 border: 1px solid var(--color-danger);
446 border-radius: var(--radius-md);
447 padding: var(--space-3) var(--space-4);
448 font-size: var(--text-sm);
449 margin-bottom: var(--space-4);
450 }
451 .form-actions {
452 display: flex;
453 gap: var(--space-3);
454 align-items: center;
455 flex-wrap: wrap;
456 }
457 .form-card {
458 background: var(--color-bg-subtle);
459 border: 1px solid var(--color-border);
460 border-radius: var(--radius-lg);
461 padding: var(--space-6);
462 margin-top: var(--space-4);
463 }
464 .checkbox-label {
465 display: flex;
466 align-items: center;
467 gap: var(--space-2);
468 cursor: pointer;
469 }
470
471 /* --- Page header --- */
472 .page-header {
473 display: flex;
474 align-items: center;
475 justify-content: space-between;
476 margin-bottom: var(--space-6);
477 gap: var(--space-4);
478 }
479 .page-title {
480 font-size: var(--text-2xl);
481 color: var(--color-text);
482 margin-bottom: var(--space-4);
483 }
484 .page-title a {
485 text-decoration: none;
486 color: var(--color-link);
487 }
488 .page-title a:hover {
489 text-decoration: underline;
490 }
491 .section-title {
492 font-size: var(--text-lg);
493 margin-bottom: var(--space-4);
494 padding-bottom: var(--space-2);
495 border-bottom: 1px solid var(--color-border);
496 }
497
498 /* --- Auth --- */
499 .auth-container {
500 max-width: 400px;
501 margin: var(--space-12) auto;
502 }
503 .auth-container .page-title {
504 margin-bottom: var(--space-6);
505 }
506 .auth-form {
507 margin-bottom: var(--space-4);
508 }
509 .auth-footer {
510 text-align: center;
511 font-size: var(--text-sm);
512 color: var(--color-text-muted);
513 margin-top: var(--space-4);
514 }
515 .passkey-btn {
516 display: none;
517 margin-top: var(--space-3);
518 }
519
520 /* --- Repo header --- */
521 .repo-header {
522 margin-bottom: var(--space-2);
523 }
524 .repo-title-row {
525 display: flex;
526 align-items: center;
527 gap: var(--space-3);
528 flex-wrap: wrap;
529 }
530 .repo-title-row .page-title {
531 margin-bottom: 0;
532 }
533 .repo-header-title {
534 display: flex;
535 align-items: center;
536 gap: var(--space-3);
537 flex-wrap: wrap;
538 }
539 .repo-description {
540 color: var(--color-text-muted);
541 margin-top: var(--space-2);
542 }
543 .repo-header-meta {
544 display: flex;
545 align-items: center;
546 gap: var(--space-4);
547 margin-bottom: var(--space-3);
548 font-size: var(--text-sm);
549 color: var(--color-text-muted);
550 }
551 .icon {
552 font-style: normal;
553 }
554
555 /* --- Branch selector --- */
556 .branch-selector {
557 display: inline-flex;
558 align-items: center;
559 gap: var(--space-2);
560 }
561 .branch-selector-icon {
562 color: var(--color-text-muted);
563 font-size: var(--text-sm);
564 user-select: none;
565 }
566 .branch-select {
567 padding: var(--space-1) var(--space-2);
568 padding-right: var(--space-5);
569 border: 1px solid var(--color-border);
570 border-radius: var(--radius-md);
571 background: var(--color-bg-subtle);
572 font-size: var(--text-sm);
573 font-family: var(--font-mono);
574 color: var(--color-text);
575 cursor: pointer;
576 appearance: auto;
577 max-width: 180px;
578 }
579 .branch-select:hover {
580 border-color: var(--color-text-muted);
581 }
582 .branch-select:focus {
583 outline: 2px solid var(--color-accent);
584 outline-offset: -1px;
585 }
586
587 /* toolbar row above file tree */
588 .tree-toolbar {
589 display: flex;
590 align-items: center;
591 justify-content: space-between;
592 margin-bottom: var(--space-3);
593 }
594
595 /* commits-header flex row */
596 .commits-header {
597 display: flex;
598 align-items: center;
599 gap: var(--space-4);
600 margin-bottom: var(--space-4);
601 flex-wrap: wrap;
602 }
603 .commits-header .section-title {
604 margin-bottom: 0;
605 }
606
607 /* --- Repo nav bar (tabs + private badge) --- */
608 .repo-nav-bar {
609 display: flex;
610 align-items: center;
611 justify-content: space-between;
612 border-bottom: 1px solid var(--color-border);
613 margin-bottom: var(--space-6);
614 gap: var(--space-4);
615 }
616
617 /* --- Repo tabs --- */
618 .repo-tabs {
619 display: flex;
620 gap: 0;
621 flex: 1;
622 overflow-x: auto;
623 overflow-y: hidden;
624 }
625 .repo-tab {
626 padding: var(--space-3) var(--space-4);
627 font-size: var(--text-sm);
628 text-decoration: none;
629 color: var(--color-text-muted);
630 border-bottom: 2px solid transparent;
631 margin-bottom: -1px;
632 transition: color 0.1s;
633 }
634 .repo-tab:hover {
635 color: var(--color-text);
636 }
637 .repo-tab.active {
638 color: var(--color-text);
639 font-weight: 600;
640 border-bottom-color: var(--color-accent);
641 }
642 /* Align active indicator with nav-bar border */
643 .repo-tab {
644 margin-bottom: -1px;
645 }
646
647 /* --- Repo list --- */
648 .repo-list {
649 display: flex;
650 flex-direction: column;
651 gap: var(--space-2);
652 }
653 .repo-card {
654 display: flex;
655 align-items: flex-start;
656 justify-content: space-between;
657 padding: var(--space-4) var(--space-5);
658 border: 1px solid var(--color-border);
659 border-radius: var(--radius-lg);
660 background: var(--color-bg);
661 gap: var(--space-4);
662 transition: border-color 0.15s;
663 }
664 .repo-card:hover {
665 border-color: var(--color-accent);
666 }
667 .repo-card-main {
668 flex: 1;
669 min-width: 0;
670 }
671 .repo-card-title {
672 display: flex;
673 align-items: center;
674 gap: var(--space-2);
675 margin-bottom: var(--space-1);
676 }
677 .repo-name {
678 font-size: var(--text-lg);
679 font-weight: 600;
680 color: var(--color-link);
681 text-decoration: none;
682 word-break: break-all;
683 }
684 .repo-name:hover {
685 text-decoration: underline;
686 }
687 .repo-card-meta {
688 display: flex;
689 flex-direction: column;
690 align-items: flex-end;
691 gap: var(--space-1);
692 font-size: var(--text-xs);
693 color: var(--color-text-muted);
694 white-space: nowrap;
695 }
696 .repo-date {
697 color: var(--color-text-muted);
698 }
699
700 /* --- Badges --- */
701 .badge {
702 display: inline-flex;
703 align-items: center;
704 padding: 1px var(--space-2);
705 border-radius: var(--radius-full);
706 font-size: var(--text-xs);
707 font-weight: 500;
708 border: 1px solid;
709 text-decoration: none;
710 }
711 .badge-private {
712 color: var(--color-warning);
713 border-color: var(--color-warning);
714 background: var(--color-warning-bg);
715 }
716 .badge-pinned {
717 color: var(--color-accent);
718 border-color: var(--color-accent);
719 background: var(--color-accent-bg);
720 }
721 .issue-badge,
722 .patch-badge {
723 display: inline-flex;
724 align-items: center;
725 padding: var(--space-1) var(--space-3);
726 border-radius: var(--radius-full);
727 font-size: var(--text-xs);
728 font-weight: 500;
729 text-transform: capitalize;
730 }
731 .issue-badge.open,
732 .patch-badge.open {
733 background: var(--color-success-bg);
734 color: var(--color-success);
735 }
736 .issue-badge.closed,
737 .patch-badge.closed {
738 background: var(--color-danger-bg);
739 color: var(--color-danger);
740 }
741 .issue-badge.completed {
742 background: var(--color-merged-bg);
743 color: var(--color-merged);
744 }
745 .patch-badge.merged {
746 background: var(--color-merged-bg);
747 color: var(--color-merged);
748 }
749 .sig-badge {
750 display: inline-flex;
751 align-items: center;
752 padding: var(--space-1) var(--space-3);
753 border-radius: var(--radius-full);
754 font-size: var(--text-xs);
755 font-weight: 500;
756 }
757 .sig-badge.verified {
758 background: var(--color-success-bg);
759 color: var(--color-success);
760 }
761 .sig-badge.unverified {
762 background: var(--color-danger-bg);
763 color: var(--color-danger);
764 }
765
766 /* --- Empty state --- */
767 .empty-state {
768 text-align: center;
769 padding: var(--space-16) var(--space-4);
770 color: var(--color-text-muted);
771 }
772 .empty-state p {
773 margin-bottom: var(--space-4);
774 font-size: var(--text-lg);
775 }
776
777 /* --- Breadcrumb --- */
778 .breadcrumb {
779 display: flex;
780 align-items: center;
781 flex-wrap: wrap;
782 gap: var(--space-1);
783 font-size: var(--text-sm);
784 margin-bottom: var(--space-4);
785 }
786 .breadcrumb a {
787 color: var(--color-link);
788 text-decoration: none;
789 }
790 .breadcrumb a:hover {
791 text-decoration: underline;
792 }
793 .breadcrumb-sep {
794 color: var(--color-text-muted);
795 }
796 .breadcrumb-current {
797 color: var(--color-text-muted);
798 }
799
800 /* --- File tree --- */
801 .file-tree {
802 width: 100%;
803 border: 1px solid var(--color-border);
804 border-radius: var(--radius-lg);
805 border-collapse: collapse;
806 overflow: hidden;
807 margin-bottom: var(--space-6);
808 }
809 .file-tree-row {
810 border-bottom: 1px solid var(--color-border-muted);
811 }
812 .file-tree-row:last-child {
813 border-bottom: none;
814 }
815 .file-tree-row:hover {
816 background: var(--color-bg-subtle);
817 }
818 .file-icon,
819 .file-name,
820 .file-size {
821 padding: var(--space-2) var(--space-3);
822 font-size: var(--text-sm);
823 vertical-align: middle;
824 }
825 .file-icon {
826 width: 36px;
827 padding-right: var(--space-1);
828 text-align: center;
829 line-height: 0;
830 }
831 .file-name {
832 width: 100%;
833 }
834 .file-name a {
835 color: var(--color-link);
836 text-decoration: none;
837 }
838 .file-name a:hover {
839 text-decoration: underline;
840 }
841 .file-name a.file-name-dir {
842 font-weight: 500;
843 }
844 .file-size {
845 text-align: right;
846 color: var(--color-text-muted);
847 font-size: var(--text-xs);
848 white-space: nowrap;
849 padding-right: var(--space-4);
850 }
851 .file-icon-dir {
852 color: var(--color-link);
853 }
854 .file-icon-file {
855 color: var(--color-text-muted);
856 }
857 .tree-icon {
858 display: inline-block;
859 vertical-align: text-bottom;
860 }
861 .file-tree-row-up .file-name a {
862 color: var(--color-text-muted);
863 }
864 .file-tree-row-up .file-name a:hover {
865 color: var(--color-link);
866 }
867
868 /* --- File blob --- */
869 .file-blob-header {
870 display: flex;
871 align-items: center;
872 justify-content: space-between;
873 padding: var(--space-3) var(--space-4);
874 background: var(--color-bg-subtle);
875 border: 1px solid var(--color-border);
876 border-radius: var(--radius-lg) var(--radius-lg) 0 0;
877 margin-top: var(--space-4);
878 }
879 .file-blob-name {
880 font-size: var(--text-sm);
881 font-weight: 500;
882 }
883 .file-blob-body {
884 border: 1px solid var(--color-border);
885 border-top: none;
886 border-radius: 0 0 var(--radius-lg) var(--radius-lg);
887 overflow: auto;
888 }
889 .file-edit-textarea {
890 display: block;
891 width: 100%;
892 box-sizing: border-box;
893 font-family: var(--font-mono);
894 font-size: var(--text-sm);
895 line-height: 1.6;
896 padding: var(--space-4);
897 background: var(--color-bg);
898 color: var(--color-text);
899 border: none;
900 resize: vertical;
901 min-height: 400px;
902 }
903 .file-edit-textarea:focus {
904 outline: 2px solid var(--color-accent);
905 outline-offset: -2px;
906 }
907 /* Blob line-number table */
908 .blob-table {
909 min-width: 100%;
910 border-collapse: collapse;
911 font-family: var(--font-mono);
912 font-size: var(--text-sm);
913 line-height: 1.6;
914 background-color: var(--shiki-light-bg, #fff);
915 color: var(--shiki-light, inherit);
916 }
917 .blob-ln {
918 width: 1%;
919 min-width: 48px;
920 text-align: right;
921 padding: 0 var(--space-3);
922 color: var(--color-text-muted);
923 border-right: 1px solid var(--color-border-muted);
924 user-select: none;
925 white-space: nowrap;
926 vertical-align: top;
927 }
928 .blob-ln a {
929 color: inherit;
930 text-decoration: none;
931 }
932 .blob-ln a:hover {
933 color: var(--color-link);
934 }
935 .blob-code {
936 padding: 0 var(--space-4);
937 white-space: pre;
938 overflow: visible;
939 vertical-align: top;
940 }
941 .blob-table tr:target {
942 background: color-mix(in srgb, #ddf4ff 60%, transparent);
943 }
944 .blob-table tr:target .blob-ln {
945 background: color-mix(in srgb, #ddf4ff 80%, transparent);
946 }
947 .file-download-notice {
948 padding: var(--space-8);
949 text-align: center;
950 color: var(--color-text-muted);
951 }
952 .file-download-notice p {
953 margin-bottom: var(--space-4);
954 }
955 .file-media {
956 padding: var(--space-4);
957 display: flex;
958 justify-content: center;
959 background: var(--color-canvas-subtle);
960 }
961 .file-media-img {
962 max-width: 100%;
963 height: auto;
964 display: block;
965 }
966 .file-media-audio {
967 width: 100%;
968 max-width: 600px;
969 }
970 .file-media-video {
971 max-width: 100%;
972 max-height: 80vh;
973 }
974
975 /* --- Commit list --- */
976 .commit-list {
977 display: flex;
978 flex-direction: column;
979 }
980 .commit-item {
981 display: flex;
982 flex-direction: column;
983 padding: var(--space-3) 0;
984 border-bottom: 1px solid var(--color-border-muted);
985 gap: var(--space-2);
986 }
987 .commit-item:last-child {
988 border-bottom: none;
989 }
990 .commit-subject {
991 color: var(--color-text);
992 text-decoration: none;
993 font-size: var(--text-sm);
994 font-weight: 500;
995 }
996 .commit-subject:hover {
997 color: var(--color-link);
998 }
999 .commit-meta {
1000 display: flex;
1001 align-items: center;
1002 justify-content: space-between;
1003 gap: var(--space-3);
1004 font-size: var(--text-xs);
1005 color: var(--color-text-muted);
1006 }
1007 .commit-meta-right {
1008 display: flex;
1009 align-items: center;
1010 gap: var(--space-3);
1011 white-space: nowrap;
1012 }
1013 .commit-hash {
1014 font-family: var(--font-mono);
1015 color: var(--color-link);
1016 text-decoration: none;
1017 background: var(--color-bg-inset);
1018 padding: 1px var(--space-2);
1019 border-radius: var(--radius-sm);
1020 }
1021 .commit-hash:hover {
1022 text-decoration: underline;
1023 }
1024 .mono {
1025 font-family: var(--font-mono);
1026 }
1027
1028 /* --- Commit detail viewer --- */
1029 .commit-page-top {
1030 display: flex;
1031 align-items: center;
1032 justify-content: space-between;
1033 margin-bottom: var(--space-4);
1034 }
1035 .commit-card {
1036 border: 1px solid var(--color-border);
1037 border-radius: var(--radius-lg);
1038 margin-bottom: var(--space-4);
1039 overflow: hidden;
1040 }
1041 .commit-card-subject {
1042 font-size: var(--text-xl);
1043 font-weight: 600;
1044 padding: var(--space-5) var(--space-6);
1045 border-bottom: 1px solid var(--color-border);
1046 line-height: 1.3;
1047 }
1048 .commit-card-body {
1049 padding: var(--space-4) var(--space-6);
1050 font-family: inherit;
1051 font-size: var(--text-sm);
1052 color: var(--color-text-muted);
1053 border-bottom: 1px solid var(--color-border);
1054 overflow-x: auto;
1055 }
1056 .commit-card-meta {
1057 padding: var(--space-4) var(--space-6);
1058 display: flex;
1059 flex-direction: column;
1060 gap: var(--space-2);
1061 background: var(--color-bg-subtle);
1062 }
1063 .commit-card-meta-row {
1064 display: flex;
1065 align-items: baseline;
1066 gap: var(--space-3);
1067 font-size: var(--text-sm);
1068 flex-wrap: wrap;
1069 }
1070 .commit-meta-label {
1071 font-weight: 600;
1072 color: var(--color-text-muted);
1073 min-width: 5rem;
1074 font-size: var(--text-xs);
1075 text-transform: uppercase;
1076 letter-spacing: 0.04em;
1077 }
1078 .commit-sha-full {
1079 font-size: var(--text-xs);
1080 background: var(--color-bg-inset);
1081 padding: 2px var(--space-2);
1082 border-radius: var(--radius-sm);
1083 word-break: break-all;
1084 }
1085 .commit-stats-bar {
1086 font-size: var(--text-sm);
1087 color: var(--color-text-muted);
1088 margin-bottom: var(--space-4);
1089 }
1090
1091 /* --- Commit layout (sidebar + diffs) --- */
1092 .commit-layout {
1093 display: grid;
1094 grid-template-columns: 1fr;
1095 gap: var(--space-5);
1096 align-items: start;
1097 }
1098 .commit-diffs {
1099 min-width: 0;
1100 }
1101 @media (min-width: 900px) {
1102 .commit-layout {
1103 grid-template-columns: 220px 1fr;
1104 }
1105 .commit-layout:has(.file-nav-details:not([open])) {
1106 grid-template-columns: auto 1fr;
1107 }
1108 }
1109
1110 /* --- File nav sidebar --- */
1111 .commit-file-nav {
1112 position: sticky;
1113 top: calc(56px + var(--space-4));
1114 max-height: calc(100vh - 140px);
1115 overflow-y: auto;
1116 }
1117 .file-nav-details {
1118 border: 1px solid var(--color-border);
1119 border-radius: var(--radius-lg);
1120 background: var(--color-bg-subtle);
1121 overflow: hidden;
1122 }
1123 .file-nav-toggle {
1124 display: flex;
1125 align-items: center;
1126 gap: var(--space-2);
1127 padding: var(--space-3) var(--space-4);
1128 font-size: var(--text-sm);
1129 font-weight: 500;
1130 cursor: pointer;
1131 list-style: none;
1132 user-select: none;
1133 border-bottom: 1px solid var(--color-border);
1134 }
1135 .file-nav-toggle::-webkit-details-marker {
1136 display: none;
1137 }
1138 .file-nav-details:not([open]) .file-nav-toggle {
1139 border-bottom: none;
1140 }
1141 .file-nav-toggle-icon {
1142 font-size: 1em;
1143 transition: transform 0.15s;
1144 }
1145 .file-nav-details:not([open]) .file-nav-toggle-icon {
1146 transform: rotate(-90deg);
1147 }
1148 .file-nav-list {
1149 padding: var(--space-1) 0;
1150 list-style: none;
1151 }
1152 .file-nav-item {
1153 display: flex;
1154 align-items: center;
1155 gap: var(--space-2);
1156 padding: var(--space-1) var(--space-3);
1157 font-size: var(--text-xs);
1158 text-decoration: none;
1159 color: var(--color-text);
1160 border-radius: 0;
1161 overflow: hidden;
1162 }
1163 .file-nav-item:hover {
1164 background: var(--color-bg-inset);
1165 }
1166 .file-nav-status {
1167 flex-shrink: 0;
1168 width: 16px;
1169 height: 16px;
1170 display: inline-flex;
1171 align-items: center;
1172 justify-content: center;
1173 border-radius: var(--radius-sm);
1174 font-size: 9px;
1175 font-weight: 700;
1176 font-family: var(--font-mono);
1177 }
1178 .file-status-added {
1179 background: var(--color-success-bg);
1180 color: var(--color-success);
1181 }
1182 .file-status-deleted {
1183 background: var(--color-danger-bg);
1184 color: var(--color-danger);
1185 }
1186 .file-status-modified {
1187 background: var(--color-accent-bg);
1188 color: var(--color-accent);
1189 }
1190 .file-status-renamed {
1191 background: var(--color-merged-bg);
1192 color: var(--color-merged);
1193 }
1194 .file-status-copied {
1195 background: var(--color-merged-bg);
1196 color: var(--color-merged);
1197 }
1198 .file-nav-name {
1199 flex: 1;
1200 overflow: hidden;
1201 text-overflow: ellipsis;
1202 white-space: nowrap;
1203 font-family: var(--font-mono);
1204 }
1205 .file-nav-stat {
1206 flex-shrink: 0;
1207 display: flex;
1208 gap: var(--space-1);
1209 font-size: var(--text-xs);
1210 font-family: var(--font-mono);
1211 }
1212 .nav-add {
1213 color: var(--color-success);
1214 }
1215 .nav-del {
1216 color: var(--color-danger);
1217 }
1218 .nav-binary {
1219 color: var(--color-muted);
1220 font-size: var(--text-xs);
1221 }
1222 .file-nav-dir > details > .file-nav-list {
1223 padding-left: var(--space-4);
1224 }
1225 .file-nav-dir-toggle {
1226 display: flex;
1227 align-items: center;
1228 gap: var(--space-1);
1229 padding: var(--space-1) var(--space-3);
1230 font-size: var(--text-xs);
1231 font-family: var(--font-mono);
1232 color: var(--color-text-muted);
1233 cursor: pointer;
1234 list-style: none;
1235 user-select: none;
1236 }
1237 .file-nav-dir-toggle::-webkit-details-marker {
1238 display: none;
1239 }
1240 .file-nav-dir > details:not([open]) .file-nav-toggle-icon {
1241 transform: rotate(-90deg);
1242 }
1243
1244 /* --- Diff file cards --- */
1245 .diff-file {
1246 border: 1px solid var(--color-border);
1247 border-radius: var(--radius-lg);
1248 margin-bottom: var(--space-4);
1249 overflow: hidden;
1250 }
1251 .diff-file-header {
1252 display: flex;
1253 align-items: center;
1254 justify-content: space-between;
1255 gap: var(--space-3);
1256 padding: var(--space-3) var(--space-4);
1257 background: var(--color-bg-subtle);
1258 cursor: pointer;
1259 list-style: none;
1260 user-select: none;
1261 flex-wrap: wrap;
1262 }
1263 .diff-file-header::-webkit-details-marker {
1264 display: none;
1265 }
1266 .diff-file-header-left {
1267 display: flex;
1268 align-items: center;
1269 gap: var(--space-2);
1270 min-width: 0;
1271 flex: 1;
1272 }
1273 .diff-file-header-right {
1274 display: flex;
1275 align-items: center;
1276 gap: var(--space-2);
1277 flex-shrink: 0;
1278 flex-wrap: wrap;
1279 }
1280 .diff-file-toggle-icon {
1281 font-size: 0.7em;
1282 flex-shrink: 0;
1283 transition: transform 0.15s;
1284 }
1285 .diff-file:not([open]) .diff-file-toggle-icon {
1286 transform: rotate(-90deg);
1287 }
1288 .diff-status-badge {
1289 flex-shrink: 0;
1290 width: 18px;
1291 height: 18px;
1292 display: inline-flex;
1293 align-items: center;
1294 justify-content: center;
1295 border-radius: var(--radius-sm);
1296 font-size: 10px;
1297 font-weight: 700;
1298 font-family: var(--font-mono);
1299 }
1300 .diff-status-added {
1301 background: var(--color-success-bg);
1302 color: var(--color-success);
1303 }
1304 .diff-status-deleted {
1305 background: var(--color-danger-bg);
1306 color: var(--color-danger);
1307 }
1308 .diff-status-modified {
1309 background: var(--color-accent-bg);
1310 color: var(--color-accent);
1311 }
1312 .diff-status-renamed {
1313 background: var(--color-merged-bg);
1314 color: var(--color-merged);
1315 }
1316 .diff-status-copied {
1317 background: var(--color-merged-bg);
1318 color: var(--color-merged);
1319 }
1320 .diff-file-path {
1321 font-size: var(--text-sm);
1322 font-weight: 500;
1323 overflow: hidden;
1324 text-overflow: ellipsis;
1325 white-space: nowrap;
1326 }
1327 .diff-rename-arrow {
1328 font-size: var(--text-xs);
1329 color: var(--color-text-muted);
1330 white-space: nowrap;
1331 overflow: hidden;
1332 text-overflow: ellipsis;
1333 }
1334 .diff-stat-add {
1335 color: var(--color-success);
1336 font-size: var(--text-sm);
1337 font-family: var(--font-mono);
1338 font-weight: 600;
1339 }
1340 .diff-stat-del {
1341 color: var(--color-danger);
1342 font-size: var(--text-sm);
1343 font-family: var(--font-mono);
1344 font-weight: 600;
1345 }
1346 .diff-stat-binary {
1347 color: var(--color-muted);
1348 font-size: var(--text-sm);
1349 font-family: var(--font-mono);
1350 }
1351 .btn-xs {
1352 padding: 1px var(--space-2);
1353 font-size: var(--text-xs);
1354 border: 1px solid var(--color-border);
1355 border-radius: var(--radius-sm);
1356 background: var(--color-bg);
1357 color: var(--color-text);
1358 text-decoration: none;
1359 cursor: pointer;
1360 white-space: nowrap;
1361 font-family: var(--font-mono);
1362 display: inline-flex;
1363 align-items: center;
1364 transition: background 0.1s;
1365 }
1366 .btn-xs:hover {
1367 background: var(--color-bg-inset);
1368 }
1369
1370 /* --- Diff file body --- */
1371 .diff-binary-notice {
1372 padding: var(--space-4) var(--space-6);
1373 font-size: var(--text-sm);
1374 color: var(--color-text-muted);
1375 font-style: italic;
1376 }
1377 .diff-hunk {
1378 border-top: 1px solid var(--color-border-muted);
1379 overflow-x: auto;
1380 }
1381 .diff-hunk:first-child {
1382 border-top: none;
1383 }
1384 .diff-hunk-header {
1385 padding: var(--space-1) var(--space-4);
1386 font-family: var(--font-mono);
1387 font-size: var(--text-xs);
1388 font-weight: normal;
1389 text-align: left;
1390 background: color-mix(
1391 in srgb,
1392 var(--color-merged-bg) 50%,
1393 var(--color-bg)
1394 );
1395 color: var(--color-merged);
1396 border-bottom: 1px solid var(--color-border-muted);
1397 white-space: pre;
1398 }
1399
1400 /* --- Diff table --- */
1401 .diff-table {
1402 min-width: 100%;
1403 border-collapse: collapse;
1404 font-family: var(--font-mono);
1405 font-size: var(--text-xs);
1406 line-height: 1.5;
1407 }
1408 .diff-ln {
1409 width: 44px;
1410 min-width: 44px;
1411 text-align: right;
1412 padding: 0 var(--space-2);
1413 color: var(--color-text-muted);
1414 border-right: 1px solid var(--color-border-muted);
1415 user-select: none;
1416 vertical-align: top;
1417 white-space: nowrap;
1418 }
1419 .diff-sign {
1420 width: 18px;
1421 min-width: 18px;
1422 text-align: center;
1423 padding: 0 var(--space-1);
1424 user-select: none;
1425 vertical-align: top;
1426 }
1427 .diff-code {
1428 padding: 0 var(--space-3);
1429 white-space: pre;
1430 overflow: visible;
1431 vertical-align: top;
1432 word-break: normal;
1433 }
1434 /* Row type backgrounds */
1435 .diff-row-add {
1436 background: color-mix(
1437 in srgb,
1438 var(--color-success-bg) 70%,
1439 transparent
1440 );
1441 }
1442 .diff-row-del {
1443 background: color-mix(in srgb, var(--color-danger-bg) 70%, transparent);
1444 }
1445 .diff-row-add .diff-ln,
1446 .diff-row-add .diff-sign {
1447 background: color-mix(
1448 in srgb,
1449 var(--color-success-bg) 90%,
1450 transparent
1451 );
1452 }
1453 .diff-row-del .diff-ln,
1454 .diff-row-del .diff-sign {
1455 background: color-mix(in srgb, var(--color-danger-bg) 90%, transparent);
1456 }
1457 .diff-row-add .diff-sign {
1458 color: var(--color-success);
1459 font-weight: 700;
1460 }
1461 .diff-row-del .diff-sign {
1462 color: var(--color-danger);
1463 font-weight: 700;
1464 }
1465
1466 .diff-ctrl {
1467 color: #f0f0f0;
1468 background: #c0392b;
1469 border-radius: 2px;
1470 font-weight: bold;
1471 padding: 0 1px;
1472 }
1473
1474 /* Shiki dark-mode support in diff code cells */
1475 @media (prefers-color-scheme: dark) {
1476 .diff-code span[style] {
1477 /* biome-ignore lint/complexity/noImportantStyles: required to override shiki inline styles */
1478 color: var(--shiki-dark) !important;
1479 }
1480 }
1481
1482 /* Shiki dark-mode support in file blob view */
1483 @media (prefers-color-scheme: dark) {
1484 .blob-table {
1485 background-color: var(--shiki-dark-bg);
1486 color: var(--shiki-dark);
1487 }
1488 .blob-table span[style] {
1489 /* biome-ignore lint/complexity/noImportantStyles: required to override shiki inline styles */
1490 color: var(--shiki-dark) !important;
1491 }
1492 .blob-table tr:target {
1493 background: color-mix(in srgb, #1c3a52 60%, transparent);
1494 }
1495 .blob-table tr:target .blob-ln {
1496 background: color-mix(in srgb, #1c3a52 80%, transparent);
1497 }
1498 }
1499 :root[data-theme="dark"] .blob-table {
1500 background-color: var(--shiki-dark-bg);
1501 color: var(--shiki-dark);
1502 }
1503 :root[data-theme="dark"] .blob-table span[style] {
1504 /* biome-ignore lint/complexity/noImportantStyles: required to override shiki inline styles */
1505 color: var(--shiki-dark) !important;
1506 }
1507
1508 /* --- Issue / Patch list --- */
1509 .list-header {
1510 display: flex;
1511 align-items: center;
1512 justify-content: space-between;
1513 padding: var(--space-3) var(--space-4);
1514 background: var(--color-bg-subtle);
1515 border: 1px solid var(--color-border);
1516 border-radius: var(--radius-lg) var(--radius-lg) 0 0;
1517 gap: var(--space-4);
1518 }
1519 .list-header-tabs {
1520 display: flex;
1521 gap: var(--space-2);
1522 }
1523 .list-tab {
1524 padding: var(--space-1) var(--space-3);
1525 border-radius: var(--radius-md);
1526 font-size: var(--text-sm);
1527 text-decoration: none;
1528 color: var(--color-text-muted);
1529 }
1530 .list-tab:hover {
1531 background: var(--color-bg-inset);
1532 color: var(--color-text);
1533 }
1534 .list-tab.active {
1535 background: var(--color-bg-inset);
1536 color: var(--color-text);
1537 font-weight: 600;
1538 }
1539 .issue-list {
1540 border: 1px solid var(--color-border);
1541 border-top: none;
1542 border-radius: 0 0 var(--radius-lg) var(--radius-lg);
1543 }
1544 .issue-item {
1545 padding: var(--space-4) var(--space-4);
1546 border-bottom: 1px solid var(--color-border-muted);
1547 }
1548 .issue-item:last-child {
1549 border-bottom: none;
1550 }
1551 .issue-main {
1552 display: flex;
1553 align-items: center;
1554 gap: var(--space-2);
1555 margin-bottom: var(--space-1);
1556 flex-wrap: wrap;
1557 }
1558 .issue-title {
1559 font-weight: 500;
1560 text-decoration: none;
1561 color: var(--color-text);
1562 flex: 1;
1563 }
1564 .issue-title:hover {
1565 color: var(--color-link);
1566 }
1567 .issue-meta {
1568 font-size: var(--text-xs);
1569 color: var(--color-text-muted);
1570 display: flex;
1571 gap: var(--space-3);
1572 }
1573 .issue-status-dot,
1574 .patch-status-dot {
1575 width: 8px;
1576 height: 8px;
1577 border-radius: 50%;
1578 flex-shrink: 0;
1579 }
1580 .issue-status-dot.open,
1581 .patch-status-dot.open {
1582 background: var(--color-success);
1583 }
1584 .issue-status-dot.closed,
1585 .patch-status-dot.closed {
1586 background: var(--color-danger);
1587 }
1588 .issue-status-dot.completed {
1589 background: var(--color-merged);
1590 }
1591 .patch-status-dot.merged {
1592 background: var(--color-merged);
1593 }
1594
1595 /* --- Issue detail / Timeline --- */
1596 .issue-detail-header {
1597 display: flex;
1598 align-items: center;
1599 gap: var(--space-3);
1600 margin-bottom: var(--space-6);
1601 }
1602 .issue-number {
1603 font-size: var(--text-2xl);
1604 font-weight: 600;
1605 color: var(--color-text-muted);
1606 white-space: nowrap;
1607 }
1608 .issue-detail-title {
1609 font-size: var(--text-2xl);
1610 font-weight: 600;
1611 overflow-wrap: anywhere;
1612 }
1613 .issue-detail-meta-actions {
1614 margin-left: auto;
1615 display: flex;
1616 gap: var(--space-2);
1617 }
1618 .patch-author-meta {
1619 display: flex;
1620 align-items: center;
1621 gap: var(--space-2);
1622 font-size: var(--text-xs);
1623 margin-top: calc(-1 * var(--space-4));
1624 margin-bottom: var(--space-6);
1625 }
1626 .patch-author-label {
1627 color: var(--color-text-muted);
1628 }
1629 .patch-author-identity {
1630 font-family: monospace;
1631 }
1632 .timeline-item {
1633 border: 1px solid var(--color-border);
1634 border-radius: var(--radius-lg);
1635 margin-bottom: var(--space-4);
1636 overflow: hidden;
1637 }
1638 .timeline-author {
1639 background: var(--color-bg-subtle);
1640 padding: var(--space-3) var(--space-4);
1641 font-size: var(--text-sm);
1642 display: flex;
1643 align-items: center;
1644 justify-content: space-between;
1645 gap: var(--space-3);
1646 border-bottom: 1px solid var(--color-border);
1647 overflow-wrap: anywhere;
1648 }
1649 .timeline-author time {
1650 color: var(--color-text-muted);
1651 font-size: var(--text-xs);
1652 width: max-content;
1653 }
1654 .timeline-author-right {
1655 margin-left: auto;
1656 display: flex;
1657 align-items: center;
1658 gap: var(--space-2);
1659 }
1660 .edited-indicator {
1661 color: var(--color-text-muted);
1662 font-size: var(--text-xs);
1663 cursor: default;
1664 }
1665
1666 /* --- Avatars --- */
1667 .avatar {
1668 display: inline-flex;
1669 border-radius: 4px;
1670 overflow: hidden;
1671 flex-shrink: 0;
1672 vertical-align: middle;
1673 }
1674 .avatar-img {
1675 width: 100%;
1676 height: 100%;
1677 object-fit: cover;
1678 display: block;
1679 color: transparent;
1680 }
1681 .avatar-placeholder {
1682 display: inline-flex;
1683 align-items: center;
1684 justify-content: center;
1685 border-radius: 4px;
1686 background: var(--color-bg-inset);
1687 color: var(--color-text-muted);
1688 font-weight: 600;
1689 flex-shrink: 0;
1690 vertical-align: middle;
1691 }
1692 .avatar-settings {
1693 display: flex;
1694 align-items: flex-start;
1695 gap: var(--space-5);
1696 }
1697 .avatar-actions {
1698 display: flex;
1699 flex-direction: column;
1700 gap: var(--space-3);
1701 }
1702 .nav-user {
1703 display: inline-flex;
1704 align-items: center;
1705 gap: var(--space-2);
1706 }
1707 .timeline-body {
1708 padding: var(--space-4);
1709 }
1710 .timeline-item-new {
1711 padding: var(--space-4);
1712 }
1713 .timeline-item-new .section-title {
1714 font-size: var(--text-base);
1715 border: none;
1716 padding-bottom: 0;
1717 }
1718 /* Edit <details> (summary only) in .timeline-author; form is a sibling shown via :has() */
1719 .timeline-author-right .inline-edit-details {
1720 border: none;
1721 }
1722 .timeline-author-right .inline-edit-details > summary {
1723 padding: 0;
1724 list-style: none;
1725 }
1726 .timeline-author-right
1727 .inline-edit-details
1728 > summary::-webkit-details-marker {
1729 display: none;
1730 }
1731 .inline-edit-details .when-open {
1732 display: none;
1733 }
1734 .inline-edit-details[open] .when-closed {
1735 display: none;
1736 }
1737 .inline-edit-details[open] .when-open {
1738 display: inline;
1739 }
1740 .inline-edit-form-area {
1741 display: none;
1742 border-top: 1px solid var(--color-border-muted);
1743 }
1744 .timeline-item:has(.inline-edit-details[open]) .inline-edit-form-area {
1745 display: block;
1746 }
1747 .timeline-item:has(.inline-edit-details[open]) .timeline-body {
1748 display: none;
1749 }
1750
1751 /* Title edit in issue/patch header */
1752 .issue-detail-header {
1753 align-items: flex-start;
1754 }
1755 .title-with-edit {
1756 flex: 1;
1757 min-width: 0;
1758 display: flex;
1759 flex-direction: column;
1760 gap: var(--space-1);
1761 }
1762 .title-edit-details {
1763 border: none;
1764 align-self: flex-start;
1765 }
1766 .title-with-edit:has(.title-edit-details[open]) .issue-detail-title {
1767 display: none;
1768 }
1769 .title-with-edit:has(.title-edit-details[open]) > .title-edit-details {
1770 display: none;
1771 }
1772 .title-edit-details > summary {
1773 padding: 0;
1774 list-style: none;
1775 }
1776 .title-edit-details > summary::-webkit-details-marker {
1777 display: none;
1778 }
1779 .title-edit-form-area {
1780 display: none;
1781 }
1782 .title-with-edit:has(.title-edit-details[open]) .title-edit-form-area {
1783 display: flex;
1784 flex: 1;
1785 min-width: 0;
1786 }
1787 .title-edit-form {
1788 display: flex;
1789 flex-direction: column;
1790 gap: var(--space-2);
1791 flex: 1;
1792 min-width: 0;
1793 }
1794 .title-edit-form .form-input {
1795 min-width: 0;
1796 width: 100%;
1797 padding: var(--space-2) var(--space-3);
1798 border: 1px solid var(--color-border);
1799 border-radius: var(--radius-md);
1800 background: var(--color-bg);
1801 color: var(--color-text);
1802 font-size: var(--text-sm);
1803 }
1804 .title-edit-form .form-input:focus {
1805 outline: 2px solid var(--color-accent);
1806 outline-offset: -1px;
1807 border-color: var(--color-accent);
1808 }
1809 .title-edit-actions {
1810 display: flex;
1811 gap: var(--space-2);
1812 }
1813
1814 .inline-edit-form {
1815 padding: var(--space-4);
1816 display: flex;
1817 flex-direction: column;
1818 gap: var(--space-3);
1819 }
1820
1821 /* --- Reactions --- */
1822 .reaction-bar {
1823 display: flex;
1824 flex-wrap: wrap;
1825 gap: var(--space-2);
1826 padding: var(--space-2) var(--space-4);
1827 border-top: 1px solid var(--color-border-muted);
1828 }
1829 .reaction-form {
1830 display: inline;
1831 }
1832 .reaction-btn {
1833 display: inline-flex;
1834 align-items: center;
1835 gap: var(--space-1);
1836 padding: var(--space-1) var(--space-3);
1837 border: 1px solid var(--color-border);
1838 border-radius: var(--radius-full);
1839 background: var(--color-bg-subtle);
1840 color: var(--color-text);
1841 font-size: var(--text-sm);
1842 cursor: pointer;
1843 transition: background 0.1s;
1844 }
1845 .reaction-btn:hover {
1846 background: var(--color-bg-inset);
1847 }
1848 .reaction-btn.reacted {
1849 background: var(--color-accent-bg);
1850 border-color: var(--color-accent);
1851 }
1852 .reaction-picker {
1853 position: relative;
1854 }
1855 .reaction-add-btn {
1856 display: inline-flex;
1857 align-items: center;
1858 justify-content: center;
1859 width: 28px;
1860 height: 28px;
1861 border: 1px dashed var(--color-border);
1862 border-radius: var(--radius-full);
1863 background: transparent;
1864 cursor: pointer;
1865 font-size: var(--text-base);
1866 color: var(--color-text-muted);
1867 list-style: none;
1868 }
1869 .reaction-add-btn::-webkit-details-marker {
1870 display: none;
1871 }
1872 .reaction-picker-dropdown {
1873 position: absolute;
1874 bottom: calc(100% + var(--space-2));
1875 left: 0;
1876 background: var(--color-bg);
1877 border: 1px solid var(--color-border);
1878 border-radius: var(--radius-lg);
1879 padding: var(--space-2);
1880 display: flex;
1881 gap: var(--space-1);
1882 z-index: 10;
1883 }
1884 .reaction-picker-btn {
1885 background: none;
1886 border: none;
1887 font-size: 1.25rem;
1888 cursor: pointer;
1889 padding: var(--space-1);
1890 border-radius: var(--radius-sm);
1891 }
1892 .reaction-picker-btn:hover {
1893 background: var(--color-bg-inset);
1894 }
1895
1896 /* --- Patch subview tabs --- */
1897 .patch-tab-nav {
1898 display: flex;
1899 border-bottom: 1px solid var(--color-border);
1900 margin-bottom: var(--space-6);
1901 }
1902 .tab-count {
1903 display: inline-flex;
1904 align-items: center;
1905 justify-content: center;
1906 min-width: 1.4em;
1907 padding: 0 var(--space-1);
1908 margin-left: var(--space-1);
1909 font-size: var(--text-xs);
1910 font-weight: 500;
1911 background: var(--color-bg-inset);
1912 border-radius: 999px;
1913 color: var(--color-text-muted);
1914 }
1915
1916 /* --- Patch apply status --- */
1917 .apply-status {
1918 margin: var(--space-4) 0;
1919 }
1920 .apply-result {
1921 display: flex;
1922 align-items: flex-start;
1923 gap: var(--space-2);
1924 padding: var(--space-3) var(--space-4);
1925 border-radius: var(--radius-md);
1926 font-size: var(--text-sm);
1927 flex-direction: column;
1928 }
1929 .apply-result > div {
1930 display: flex;
1931 gap: var(--space-2);
1932 align-items: center;
1933 }
1934 .apply-clean {
1935 background: var(--color-success-bg);
1936 color: var(--color-success);
1937 border: 1px solid var(--color-success);
1938 }
1939 .apply-conflict {
1940 background: var(--color-danger-bg);
1941 color: var(--color-danger);
1942 border: 1px solid var(--color-danger);
1943 }
1944 .apply-checking,
1945 .apply-unknown {
1946 color: var(--color-text-muted);
1947 font-style: italic;
1948 font-size: var(--text-sm);
1949 }
1950 .apply-output {
1951 font-family: var(--font-mono);
1952 font-size: var(--text-xs);
1953 white-space: pre-wrap;
1954 margin-top: var(--space-2);
1955 padding: var(--space-2);
1956 background: rgba(0, 0, 0, 0.05);
1957 border-radius: var(--radius-sm);
1958 width: 100%;
1959 }
1960 .patch-actions {
1961 display: flex;
1962 gap: var(--space-3);
1963 margin: var(--space-4) 0;
1964 flex-wrap: wrap;
1965 }
1966 .patch-card-title-row {
1967 display: flex;
1968 align-items: flex-start;
1969 gap: var(--space-3);
1970 justify-content: space-between;
1971 margin-bottom: var(--space-3);
1972 }
1973 .patch-card-title-row .commit-card-subject {
1974 margin-bottom: 0;
1975 }
1976 .patch-card-description {
1977 margin-top: var(--space-4);
1978 padding-top: var(--space-4);
1979 border-top: 1px solid var(--color-border-muted);
1980 }
1981
1982 /* --- Repo home layout --- */
1983 .repo-home-layout {
1984 display: grid;
1985 gap: var(--space-8);
1986 }
1987 @media (min-width: 768px) {
1988 .repo-home-layout {
1989 grid-template-columns: 1fr 1fr;
1990 }
1991 }
1992 .readme-section {
1993 border: 1px solid var(--color-border);
1994 border-radius: var(--radius-lg);
1995 overflow: hidden;
1996 }
1997 .readme-header {
1998 background: var(--color-bg-subtle);
1999 padding: var(--space-3) var(--space-4);
2000 font-size: var(--text-sm);
2001 font-weight: 500;
2002 border-bottom: 1px solid var(--color-border);
2003 }
2004 /* --- Code setup block --- */
2005 .code-setup {
2006 background: var(--color-bg-subtle);
2007 border: 1px solid var(--color-border);
2008 border-radius: var(--radius-lg);
2009 padding: var(--space-4);
2010 font-size: var(--text-sm);
2011 margin-top: var(--space-4);
2012 overflow: auto;
2013 text-align: left;
2014 }
2015 .code-plain {
2016 background: var(--color-bg-subtle);
2017 padding: var(--space-4);
2018 overflow: auto;
2019 font-size: var(--text-sm);
2020 line-height: 1.6;
2021 }
2022
2023 /* --- Markdown body --- */
2024 .markdown-body {
2025 font-size: var(--text-sm);
2026 line-height: 1.6;
2027 color: var(--color-text);
2028 }
2029 .markdown-body h1,
2030 .markdown-body h2,
2031 .markdown-body h3,
2032 .markdown-body h4,
2033 .markdown-body h5,
2034 .markdown-body h6 {
2035 margin-top: var(--space-6);
2036 margin-bottom: var(--space-3);
2037 }
2038 .markdown-body p {
2039 margin-bottom: var(--space-4);
2040 }
2041 .markdown-body a {
2042 color: var(--color-link);
2043 }
2044 .markdown-body code {
2045 background: var(--color-bg-inset);
2046 padding: 0.1em 0.3em;
2047 border-radius: var(--radius-sm);
2048 font-size: 0.9em;
2049 }
2050 .markdown-body pre {
2051 background: var(--color-bg-subtle);
2052 border: 1px solid var(--color-border);
2053 border-radius: var(--radius-md);
2054 padding: var(--space-4);
2055 overflow: auto;
2056 margin-bottom: var(--space-4);
2057 }
2058 .markdown-body pre code {
2059 background: none;
2060 padding: 0;
2061 }
2062 .markdown-body ul,
2063 .markdown-body ol {
2064 padding-left: var(--space-6);
2065 margin-bottom: var(--space-4);
2066 }
2067 .markdown-body ul {
2068 list-style: disc;
2069 }
2070 .markdown-body ol {
2071 list-style: decimal;
2072 }
2073 .markdown-body li {
2074 margin-bottom: var(--space-1);
2075 }
2076 .markdown-body blockquote {
2077 border-left: 3px solid var(--color-border);
2078 padding-left: var(--space-4);
2079 color: var(--color-text-muted);
2080 margin: var(--space-4) 0;
2081 }
2082 .markdown-body table {
2083 width: 100%;
2084 border-collapse: collapse;
2085 margin-bottom: var(--space-4);
2086 }
2087 .markdown-body th,
2088 .markdown-body td {
2089 padding: var(--space-2) var(--space-3);
2090 border: 1px solid var(--color-border);
2091 }
2092 .markdown-body th {
2093 background: var(--color-bg-subtle);
2094 font-weight: 600;
2095 }
2096 .markdown-body hr {
2097 border: none;
2098 border-top: 1px solid var(--color-border);
2099 margin: var(--space-6) 0;
2100 }
2101 .markdown-body img {
2102 max-width: 100%;
2103 border-radius: var(--radius-md);
2104 }
2105 .markdown-body details {
2106 margin-bottom: var(--space-4);
2107 }
2108 .markdown-body summary {
2109 cursor: pointer;
2110 font-weight: 500;
2111 }
2112 .readme-section .markdown-body {
2113 padding: var(--space-4);
2114 }
2115
2116 /* --- Search row (search form + sort select) --- */
2117 .search-row {
2118 display: flex;
2119 align-items: center;
2120 gap: var(--space-3);
2121 margin-bottom: var(--space-5);
2122 }
2123 .search-form {
2124 flex: 1;
2125 }
2126 .repo-sort-select {
2127 padding: var(--space-1) var(--space-2);
2128 padding-right: var(--space-5);
2129 border: 1px solid var(--color-border);
2130 border-radius: var(--radius-md);
2131 background: var(--color-bg-subtle);
2132 font-size: var(--text-sm);
2133 color: var(--color-text);
2134 cursor: pointer;
2135 appearance: auto;
2136 }
2137 .repo-sort-select:hover {
2138 border-color: var(--color-text-muted);
2139 }
2140 .repo-sort-select:focus {
2141 outline: 2px solid var(--color-accent);
2142 outline-offset: -1px;
2143 }
2144 .search-input-wrap {
2145 display: flex;
2146 gap: var(--space-2);
2147 }
2148 .search-input {
2149 flex: 1;
2150 padding: var(--space-2) var(--space-3);
2151 border: 1px solid var(--color-border);
2152 border-radius: var(--radius-md);
2153 background: var(--color-bg);
2154 color: var(--color-text);
2155 font-size: var(--text-sm);
2156 }
2157 .search-input:focus {
2158 outline: 2px solid var(--color-accent);
2159 outline-offset: -1px;
2160 border-color: var(--color-accent);
2161 }
2162
2163 /* --- Issue close bar --- */
2164 .issue-close-bar {
2165 display: flex;
2166 justify-content: flex-end;
2167 padding: var(--space-3) 0;
2168 border-top: 1px solid var(--color-border-muted);
2169 margin-top: var(--space-2);
2170 }
2171
2172 /* --- Auth divider --- */
2173 .auth-divider {
2174 display: flex;
2175 align-items: center;
2176 gap: var(--space-3);
2177 margin: var(--space-4) 0;
2178 color: var(--color-text-muted);
2179 font-size: var(--text-sm);
2180 }
2181 .auth-divider::before,
2182 .auth-divider::after {
2183 content: "";
2184 flex: 1;
2185 height: 1px;
2186 background: var(--color-border);
2187 }
2188
2189 /* --- Passkey UI in settings --- */
2190 .passkey-actions {
2191 display: flex;
2192 flex-direction: column;
2193 gap: var(--space-3);
2194 align-items: flex-start;
2195 margin-top: var(--space-3);
2196 }
2197 .passkey-status {
2198 font-size: var(--text-sm);
2199 }
2200
2201 /* --- Danger zone --- */
2202 .danger-zone {
2203 margin-top: var(--space-8);
2204 }
2205 .danger-title {
2206 color: var(--color-danger);
2207 border-bottom-color: var(--color-danger);
2208 }
2209 .danger-card {
2210 border-color: var(--color-danger);
2211 background: var(--color-danger-bg);
2212 }
2213 .danger-item {
2214 display: flex;
2215 align-items: center;
2216 justify-content: space-between;
2217 gap: var(--space-4);
2218 flex-wrap: wrap;
2219 }
2220 .danger-item p {
2221 margin: var(--space-1) 0 0;
2222 }
2223 .btn-danger {
2224 background: var(--color-danger);
2225 border-color: transparent;
2226 color: #fff;
2227 }
2228 .btn-danger:hover {
2229 filter: brightness(0.9);
2230 }
2231
2232 /* --- Release list items --- */
2233 .release-item-header {
2234 display: flex;
2235 gap: var(--space-3);
2236 align-items: flex-start;
2237 }
2238 .release-item-main {
2239 flex: 1;
2240 min-width: 0;
2241 }
2242 .release-item-title {
2243 font-size: var(--text-lg);
2244 font-weight: 700;
2245 text-decoration: none;
2246 color: var(--color-text);
2247 display: block;
2248 margin-bottom: var(--space-1);
2249 }
2250 .release-item-title:hover {
2251 color: var(--color-link);
2252 }
2253 .release-item-meta {
2254 display: flex;
2255 flex-wrap: wrap;
2256 gap: var(--space-3);
2257 align-items: center;
2258 font-size: var(--text-xs);
2259 color: var(--color-text-muted);
2260 }
2261 .release-item-date {
2262 display: flex;
2263 flex-direction: column;
2264 align-items: flex-end;
2265 gap: var(--space-2);
2266 font-size: var(--text-xs);
2267 color: var(--color-text-muted);
2268 white-space: nowrap;
2269 flex-shrink: 0;
2270 }
2271
2272 /* --- Release notes preview in list --- */
2273 .release-notes-section {
2274 margin-top: var(--space-3);
2275 }
2276 .release-notes-label {
2277 font-size: var(--text-xs);
2278 font-weight: 600;
2279 color: var(--color-text-muted);
2280 text-transform: uppercase;
2281 letter-spacing: 0.05em;
2282 margin-bottom: var(--space-2);
2283 }
2284 .notes-expand > summary {
2285 list-style: none;
2286 cursor: pointer;
2287 outline: none;
2288 }
2289 .notes-expand > summary::-webkit-details-marker {
2290 display: none;
2291 }
2292 .notes-preview {
2293 max-height: calc(5 * 1.6em);
2294 overflow: hidden;
2295 position: relative;
2296 white-space: pre-wrap;
2297 font-size: var(--text-sm);
2298 color: var(--color-text);
2299 line-height: 1.6;
2300 word-break: break-word;
2301 margin-bottom: var(--space-1);
2302 }
2303 .notes-preview::after {
2304 content: "";
2305 position: absolute;
2306 bottom: 0;
2307 left: 0;
2308 right: 0;
2309 height: 2.5em;
2310 background: linear-gradient(transparent, var(--color-bg));
2311 pointer-events: none;
2312 }
2313 .notes-expand[open] .notes-preview {
2314 display: none;
2315 }
2316 .notes-full {
2317 padding-top: var(--space-3);
2318 padding-bottom: var(--space-1);
2319 }
2320 .notes-expand[open] {
2321 display: flex;
2322 flex-direction: column;
2323 }
2324 .notes-expand[open] > summary {
2325 order: 1;
2326 }
2327 .notes-expand[open] > .notes-full {
2328 order: 0;
2329 }
2330 .notes-toggle-label {
2331 display: inline-block;
2332 font-size: var(--text-xs);
2333 color: var(--color-link);
2334 margin-top: var(--space-1);
2335 }
2336 .notes-toggle-label:hover {
2337 text-decoration: underline;
2338 }
2339 .notes-toggle-label::before {
2340 content: "Show more ↓";
2341 }
2342 .notes-expand[open] .notes-toggle-label::before {
2343 content: "Show less ↑";
2344 }
2345
2346 /* --- Release detail --- */
2347 .release-detail {
2348 padding: var(--space-6) 0;
2349 }
2350 .release-header {
2351 margin-bottom: var(--space-6);
2352 }
2353 .release-notes {
2354 margin-bottom: var(--space-6);
2355 }
2356 .release-assets {
2357 margin-bottom: var(--space-6);
2358 }
2359 .release-assets-heading {
2360 font-size: var(--text-base);
2361 font-weight: 600;
2362 margin-bottom: var(--space-3);
2363 }
2364 .asset-list {
2365 border: 1px solid var(--color-border);
2366 border-radius: var(--radius-lg);
2367 overflow: hidden;
2368 }
2369 .asset-item {
2370 display: flex;
2371 align-items: center;
2372 gap: var(--space-4);
2373 padding: var(--space-3) var(--space-4);
2374 border-bottom: 1px solid var(--color-border-muted);
2375 font-size: var(--text-sm);
2376 }
2377 .asset-item:last-child {
2378 border-bottom: none;
2379 }
2380 .asset-name {
2381 flex: 1;
2382 color: var(--color-link);
2383 text-decoration: none;
2384 font-family: var(--font-mono);
2385 font-size: var(--text-xs);
2386 }
2387 .asset-name:hover {
2388 text-decoration: underline;
2389 }
2390 .asset-name-pending {
2391 color: var(--color-text-muted);
2392 cursor: default;
2393 }
2394 .asset-item-pending {
2395 opacity: 0.6;
2396 }
2397 .asset-size,
2398 .asset-meta {
2399 color: var(--color-text-muted);
2400 font-size: var(--text-xs);
2401 white-space: nowrap;
2402 }
2403 .release-back {
2404 margin-top: var(--space-4);
2405 display: flex;
2406 gap: var(--space-3);
2407 align-items: center;
2408 justify-content: space-between;
2409 }
2410}
2411
2412/* ============================================================
2413 @layer utilities
2414 ============================================================ */
2415@layer utilities {
2416 .text-muted {
2417 color: var(--color-text-muted);
2418 }
2419 .text-sm {
2420 font-size: var(--text-sm);
2421 }
2422 .text-xs {
2423 font-size: var(--text-xs);
2424 }
2425 .font-mono {
2426 font-family: var(--font-mono);
2427 }
2428 .mt-1 {
2429 margin-top: var(--space-1);
2430 }
2431 .mt-2 {
2432 margin-top: var(--space-2);
2433 }
2434 .mt-4 {
2435 margin-top: var(--space-4);
2436 }
2437 .mt-6 {
2438 margin-top: var(--space-6);
2439 }
2440 .mb-4 {
2441 margin-bottom: var(--space-4);
2442 }
2443 .flex {
2444 display: flex;
2445 }
2446 .gap-2 {
2447 gap: var(--space-2);
2448 }
2449 .gap-4 {
2450 gap: var(--space-4);
2451 }
2452 .items-center {
2453 align-items: center;
2454 }
2455 .justify-between {
2456 justify-content: space-between;
2457 }
2458 .hidden {
2459 display: none;
2460 }
2461}
2462
2463/* ============================================================
2464 Pagination
2465 ============================================================ */
2466.commit-verify-hint {
2467 margin-bottom: var(--space-4);
2468 font-size: var(--text-xs);
2469 color: var(--color-text-muted);
2470}
2471.commit-verify-hint code {
2472 word-break: break-all;
2473}
2474.commit-cursor-nav {
2475 display: flex;
2476 justify-content: space-between;
2477 border-top: 1px solid var(--color-border);
2478 margin-top: var(--space-2);
2479 padding: var(--space-4) 0 var(--space-2);
2480}
2481
2482.commit-cursor-prev {
2483 flex: 1;
2484}
2485.commit-cursor-next {
2486 flex: 1;
2487 text-align: right;
2488}
2489
2490.pagination {
2491 display: grid;
2492 grid-template-columns: 1fr auto 1fr;
2493 align-items: center;
2494 border-top: 1px solid var(--color-border);
2495 margin-top: var(--space-2);
2496 padding: var(--space-4) 0 var(--space-2);
2497}
2498
2499.pagination-prev {
2500 justify-self: start;
2501}
2502.pagination-next {
2503 justify-self: end;
2504}
2505
2506.pagination-info {
2507 justify-self: center;
2508 font-size: var(--text-sm);
2509 color: var(--color-text-muted);
2510}
2511
2512.pagination-btn {
2513 display: inline-flex;
2514 align-items: center;
2515 gap: var(--space-1);
2516 padding: var(--space-1) var(--space-3);
2517 border: 1px solid var(--color-border);
2518 border-radius: var(--radius-md);
2519 font-size: var(--text-sm);
2520 font-weight: 500;
2521 text-decoration: none;
2522 color: var(--color-text);
2523 background: var(--color-bg-subtle);
2524 transition:
2525 background 0.1s,
2526 border-color 0.1s;
2527 white-space: nowrap;
2528}
2529
2530.pagination-btn:hover {
2531 background: var(--color-bg-inset);
2532 border-color: var(--color-border);
2533 color: var(--color-text);
2534 text-decoration: none;
2535}
2536
2537/* Settings */
2538.theme-options {
2539 display: flex;
2540 gap: var(--space-4);
2541 margin-bottom: var(--space-4);
2542 flex-wrap: wrap;
2543}
2544.theme-option {
2545 display: flex;
2546 align-items: center;
2547 gap: var(--space-2);
2548 cursor: pointer;
2549 font-size: var(--text-sm);
2550}
2551.settings-form {
2552 display: flex;
2553 flex-direction: column;
2554 gap: var(--space-4);
2555}
2556.passkey-list {
2557 display: flex;
2558 flex-direction: column;
2559 gap: var(--space-2);
2560 margin-bottom: var(--space-4);
2561}
2562.passkey-item {
2563 display: flex;
2564 align-items: center;
2565 gap: var(--space-3);
2566 padding: var(--space-2) 0;
2567 border-bottom: 1px solid var(--color-border-muted);
2568 font-size: var(--text-sm);
2569}
2570.passkey-item:last-child {
2571 border-bottom: none;
2572}
2573.passkey-date {
2574 flex: 1;
2575 color: var(--color-text-muted);
2576}
2577.ssh-key-info {
2578 flex: 1;
2579 display: flex;
2580 flex-direction: column;
2581 gap: var(--space-1);
2582 min-width: 0;
2583}
2584.ssh-key-name {
2585 font-weight: 500;
2586}
2587.ssh-key-fingerprint {
2588 font-family: var(--font-mono);
2589 font-size: var(--text-xs);
2590 overflow: hidden;
2591 text-overflow: ellipsis;
2592 white-space: nowrap;
2593}
2594.form-textarea {
2595 resize: vertical;
2596 min-height: 4.5rem;
2597 font-family: var(--font-mono);
2598 font-size: var(--text-sm);
2599}
2600/* Clone popup */
2601.clone-popup-details {
2602 position: relative;
2603 display: inline-block;
2604}
2605.clone-popup-details > summary {
2606 list-style: none;
2607}
2608.clone-popup-details > summary::-webkit-details-marker {
2609 display: none;
2610}
2611.clone-popup {
2612 position: absolute;
2613 right: 1rem;
2614 top: calc(100% + var(--space-2));
2615 background: var(--color-bg);
2616 border: 1px solid var(--color-border);
2617 border-radius: var(--radius-lg);
2618 padding: var(--space-3);
2619 min-width: 22rem;
2620 z-index: 100;
2621 box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);
2622 display: flex;
2623 flex-direction: column;
2624 gap: var(--space-2);
2625}
2626.clone-url-row {
2627 display: flex;
2628 align-items: center;
2629 gap: var(--space-2);
2630}
2631.clone-url-label {
2632 font-size: var(--text-xs);
2633 font-weight: 600;
2634 color: var(--color-text-muted);
2635 text-transform: uppercase;
2636 letter-spacing: 0.05em;
2637 min-width: 2.75rem;
2638}
2639.clone-url-input {
2640 flex: 1;
2641 font-family: var(--font-mono);
2642 font-size: var(--text-sm);
2643 background: var(--color-bg-subtle);
2644 border: 1px solid var(--color-border-muted);
2645 border-radius: var(--radius-md);
2646 padding: var(--space-1) var(--space-2);
2647 color: var(--color-text);
2648 cursor: text;
2649 min-width: 0;
2650}
2651.user-list {
2652 display: flex;
2653 flex-direction: column;
2654 gap: var(--space-2);
2655 margin-bottom: var(--space-6);
2656}
2657.user-item {
2658 display: flex;
2659 align-items: center;
2660 gap: var(--space-3);
2661 padding: var(--space-2) 0;
2662 border-bottom: 1px solid var(--color-border-muted);
2663 font-size: var(--text-sm);
2664}
2665.user-item:last-child {
2666 border-bottom: none;
2667}
2668.user-name {
2669 font-weight: 500;
2670 flex: 1;
2671}
2672.user-date {
2673 color: var(--color-text-muted);
2674 font-size: var(--text-xs);
2675}
2676