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 }
878 .file-blob-name {
879 font-size: var(--text-sm);
880 font-weight: 500;
881 }
882 .file-blob-body {
883 border: 1px solid var(--color-border);
884 border-top: none;
885 border-radius: 0 0 var(--radius-lg) var(--radius-lg);
886 overflow: auto;
887 }
888 /* Blob line-number table */
889 .blob-table {
890 min-width: 100%;
891 border-collapse: collapse;
892 font-family: var(--font-mono);
893 font-size: var(--text-sm);
894 line-height: 1.6;
895 background-color: var(--shiki-light-bg, #fff);
896 color: var(--shiki-light, inherit);
897 }
898 .blob-ln {
899 width: 1%;
900 min-width: 48px;
901 text-align: right;
902 padding: 0 var(--space-3);
903 color: var(--color-text-muted);
904 border-right: 1px solid var(--color-border-muted);
905 user-select: none;
906 white-space: nowrap;
907 vertical-align: top;
908 }
909 .blob-ln a {
910 color: inherit;
911 text-decoration: none;
912 }
913 .blob-ln a:hover {
914 color: var(--color-link);
915 }
916 .blob-code {
917 padding: 0 var(--space-4);
918 white-space: pre;
919 overflow: visible;
920 vertical-align: top;
921 }
922 .blob-table tr:target {
923 background: color-mix(in srgb, #ddf4ff 60%, transparent);
924 }
925 .blob-table tr:target .blob-ln {
926 background: color-mix(in srgb, #ddf4ff 80%, transparent);
927 }
928 .file-download-notice {
929 padding: var(--space-8);
930 text-align: center;
931 color: var(--color-text-muted);
932 }
933 .file-download-notice p {
934 margin-bottom: var(--space-4);
935 }
936 .file-media {
937 padding: var(--space-4);
938 display: flex;
939 justify-content: center;
940 background: var(--color-canvas-subtle);
941 }
942 .file-media-img {
943 max-width: 100%;
944 height: auto;
945 display: block;
946 }
947 .file-media-audio {
948 width: 100%;
949 max-width: 600px;
950 }
951 .file-media-video {
952 max-width: 100%;
953 max-height: 80vh;
954 }
955
956 /* --- Commit list --- */
957 .commit-list {
958 display: flex;
959 flex-direction: column;
960 }
961 .commit-item {
962 display: flex;
963 flex-direction: column;
964 padding: var(--space-3) 0;
965 border-bottom: 1px solid var(--color-border-muted);
966 gap: var(--space-2);
967 }
968 .commit-item:last-child {
969 border-bottom: none;
970 }
971 .commit-subject {
972 color: var(--color-text);
973 text-decoration: none;
974 font-size: var(--text-sm);
975 font-weight: 500;
976 }
977 .commit-subject:hover {
978 color: var(--color-link);
979 }
980 .commit-meta {
981 display: flex;
982 align-items: center;
983 justify-content: space-between;
984 gap: var(--space-3);
985 font-size: var(--text-xs);
986 color: var(--color-text-muted);
987 }
988 .commit-meta-right {
989 display: flex;
990 align-items: center;
991 gap: var(--space-3);
992 white-space: nowrap;
993 }
994 .commit-hash {
995 font-family: var(--font-mono);
996 color: var(--color-link);
997 text-decoration: none;
998 background: var(--color-bg-inset);
999 padding: 1px var(--space-2);
1000 border-radius: var(--radius-sm);
1001 }
1002 .commit-hash:hover {
1003 text-decoration: underline;
1004 }
1005 .mono {
1006 font-family: var(--font-mono);
1007 }
1008
1009 /* --- Commit detail viewer --- */
1010 .commit-page-top {
1011 display: flex;
1012 align-items: center;
1013 justify-content: space-between;
1014 margin-bottom: var(--space-4);
1015 }
1016 .commit-card {
1017 border: 1px solid var(--color-border);
1018 border-radius: var(--radius-lg);
1019 margin-bottom: var(--space-4);
1020 overflow: hidden;
1021 }
1022 .commit-card-subject {
1023 font-size: var(--text-xl);
1024 font-weight: 600;
1025 padding: var(--space-5) var(--space-6);
1026 border-bottom: 1px solid var(--color-border);
1027 line-height: 1.3;
1028 }
1029 .commit-card-body {
1030 padding: var(--space-4) var(--space-6);
1031 font-family: inherit;
1032 font-size: var(--text-sm);
1033 color: var(--color-text-muted);
1034 border-bottom: 1px solid var(--color-border);
1035 overflow-x: auto;
1036 }
1037 .commit-card-meta {
1038 padding: var(--space-4) var(--space-6);
1039 display: flex;
1040 flex-direction: column;
1041 gap: var(--space-2);
1042 background: var(--color-bg-subtle);
1043 }
1044 .commit-card-meta-row {
1045 display: flex;
1046 align-items: baseline;
1047 gap: var(--space-3);
1048 font-size: var(--text-sm);
1049 flex-wrap: wrap;
1050 }
1051 .commit-meta-label {
1052 font-weight: 600;
1053 color: var(--color-text-muted);
1054 min-width: 5rem;
1055 font-size: var(--text-xs);
1056 text-transform: uppercase;
1057 letter-spacing: 0.04em;
1058 }
1059 .commit-sha-full {
1060 font-size: var(--text-xs);
1061 background: var(--color-bg-inset);
1062 padding: 2px var(--space-2);
1063 border-radius: var(--radius-sm);
1064 word-break: break-all;
1065 }
1066 .commit-stats-bar {
1067 font-size: var(--text-sm);
1068 color: var(--color-text-muted);
1069 margin-bottom: var(--space-4);
1070 }
1071
1072 /* --- Commit layout (sidebar + diffs) --- */
1073 .commit-layout {
1074 display: grid;
1075 grid-template-columns: 1fr;
1076 gap: var(--space-5);
1077 align-items: start;
1078 }
1079 .commit-diffs {
1080 min-width: 0;
1081 }
1082 @media (min-width: 900px) {
1083 .commit-layout {
1084 grid-template-columns: 220px 1fr;
1085 }
1086 .commit-layout:has(.file-nav-details:not([open])) {
1087 grid-template-columns: auto 1fr;
1088 }
1089 }
1090
1091 /* --- File nav sidebar --- */
1092 .commit-file-nav {
1093 position: sticky;
1094 top: calc(56px + var(--space-4));
1095 max-height: calc(100vh - 140px);
1096 overflow-y: auto;
1097 }
1098 .file-nav-details {
1099 border: 1px solid var(--color-border);
1100 border-radius: var(--radius-lg);
1101 background: var(--color-bg-subtle);
1102 overflow: hidden;
1103 }
1104 .file-nav-toggle {
1105 display: flex;
1106 align-items: center;
1107 gap: var(--space-2);
1108 padding: var(--space-3) var(--space-4);
1109 font-size: var(--text-sm);
1110 font-weight: 500;
1111 cursor: pointer;
1112 list-style: none;
1113 user-select: none;
1114 border-bottom: 1px solid var(--color-border);
1115 }
1116 .file-nav-toggle::-webkit-details-marker {
1117 display: none;
1118 }
1119 .file-nav-details:not([open]) .file-nav-toggle {
1120 border-bottom: none;
1121 }
1122 .file-nav-toggle-icon {
1123 font-size: 1em;
1124 transition: transform 0.15s;
1125 }
1126 .file-nav-details:not([open]) .file-nav-toggle-icon {
1127 transform: rotate(-90deg);
1128 }
1129 .file-nav-list {
1130 padding: var(--space-1) 0;
1131 list-style: none;
1132 }
1133 .file-nav-item {
1134 display: flex;
1135 align-items: center;
1136 gap: var(--space-2);
1137 padding: var(--space-1) var(--space-3);
1138 font-size: var(--text-xs);
1139 text-decoration: none;
1140 color: var(--color-text);
1141 border-radius: 0;
1142 overflow: hidden;
1143 }
1144 .file-nav-item:hover {
1145 background: var(--color-bg-inset);
1146 }
1147 .file-nav-status {
1148 flex-shrink: 0;
1149 width: 16px;
1150 height: 16px;
1151 display: inline-flex;
1152 align-items: center;
1153 justify-content: center;
1154 border-radius: var(--radius-sm);
1155 font-size: 9px;
1156 font-weight: 700;
1157 font-family: var(--font-mono);
1158 }
1159 .file-status-added {
1160 background: var(--color-success-bg);
1161 color: var(--color-success);
1162 }
1163 .file-status-deleted {
1164 background: var(--color-danger-bg);
1165 color: var(--color-danger);
1166 }
1167 .file-status-modified {
1168 background: var(--color-accent-bg);
1169 color: var(--color-accent);
1170 }
1171 .file-status-renamed {
1172 background: var(--color-merged-bg);
1173 color: var(--color-merged);
1174 }
1175 .file-status-copied {
1176 background: var(--color-merged-bg);
1177 color: var(--color-merged);
1178 }
1179 .file-nav-name {
1180 flex: 1;
1181 overflow: hidden;
1182 text-overflow: ellipsis;
1183 white-space: nowrap;
1184 font-family: var(--font-mono);
1185 }
1186 .file-nav-stat {
1187 flex-shrink: 0;
1188 display: flex;
1189 gap: var(--space-1);
1190 font-size: var(--text-xs);
1191 font-family: var(--font-mono);
1192 }
1193 .nav-add {
1194 color: var(--color-success);
1195 }
1196 .nav-del {
1197 color: var(--color-danger);
1198 }
1199 .nav-binary {
1200 color: var(--color-muted);
1201 font-size: var(--text-xs);
1202 }
1203 .file-nav-dir > details > .file-nav-list {
1204 padding-left: var(--space-4);
1205 }
1206 .file-nav-dir-toggle {
1207 display: flex;
1208 align-items: center;
1209 gap: var(--space-1);
1210 padding: var(--space-1) var(--space-3);
1211 font-size: var(--text-xs);
1212 font-family: var(--font-mono);
1213 color: var(--color-text-muted);
1214 cursor: pointer;
1215 list-style: none;
1216 user-select: none;
1217 }
1218 .file-nav-dir-toggle::-webkit-details-marker {
1219 display: none;
1220 }
1221 .file-nav-dir > details:not([open]) .file-nav-toggle-icon {
1222 transform: rotate(-90deg);
1223 }
1224
1225 /* --- Diff file cards --- */
1226 .diff-file {
1227 border: 1px solid var(--color-border);
1228 border-radius: var(--radius-lg);
1229 margin-bottom: var(--space-4);
1230 overflow: hidden;
1231 }
1232 .diff-file-header {
1233 display: flex;
1234 align-items: center;
1235 justify-content: space-between;
1236 gap: var(--space-3);
1237 padding: var(--space-3) var(--space-4);
1238 background: var(--color-bg-subtle);
1239 cursor: pointer;
1240 list-style: none;
1241 user-select: none;
1242 flex-wrap: wrap;
1243 }
1244 .diff-file-header::-webkit-details-marker {
1245 display: none;
1246 }
1247 .diff-file-header-left {
1248 display: flex;
1249 align-items: center;
1250 gap: var(--space-2);
1251 min-width: 0;
1252 flex: 1;
1253 }
1254 .diff-file-header-right {
1255 display: flex;
1256 align-items: center;
1257 gap: var(--space-2);
1258 flex-shrink: 0;
1259 flex-wrap: wrap;
1260 }
1261 .diff-file-toggle-icon {
1262 font-size: 0.7em;
1263 flex-shrink: 0;
1264 transition: transform 0.15s;
1265 }
1266 .diff-file:not([open]) .diff-file-toggle-icon {
1267 transform: rotate(-90deg);
1268 }
1269 .diff-status-badge {
1270 flex-shrink: 0;
1271 width: 18px;
1272 height: 18px;
1273 display: inline-flex;
1274 align-items: center;
1275 justify-content: center;
1276 border-radius: var(--radius-sm);
1277 font-size: 10px;
1278 font-weight: 700;
1279 font-family: var(--font-mono);
1280 }
1281 .diff-status-added {
1282 background: var(--color-success-bg);
1283 color: var(--color-success);
1284 }
1285 .diff-status-deleted {
1286 background: var(--color-danger-bg);
1287 color: var(--color-danger);
1288 }
1289 .diff-status-modified {
1290 background: var(--color-accent-bg);
1291 color: var(--color-accent);
1292 }
1293 .diff-status-renamed {
1294 background: var(--color-merged-bg);
1295 color: var(--color-merged);
1296 }
1297 .diff-status-copied {
1298 background: var(--color-merged-bg);
1299 color: var(--color-merged);
1300 }
1301 .diff-file-path {
1302 font-size: var(--text-sm);
1303 font-weight: 500;
1304 overflow: hidden;
1305 text-overflow: ellipsis;
1306 white-space: nowrap;
1307 }
1308 .diff-rename-arrow {
1309 font-size: var(--text-xs);
1310 color: var(--color-text-muted);
1311 white-space: nowrap;
1312 overflow: hidden;
1313 text-overflow: ellipsis;
1314 }
1315 .diff-stat-add {
1316 color: var(--color-success);
1317 font-size: var(--text-sm);
1318 font-family: var(--font-mono);
1319 font-weight: 600;
1320 }
1321 .diff-stat-del {
1322 color: var(--color-danger);
1323 font-size: var(--text-sm);
1324 font-family: var(--font-mono);
1325 font-weight: 600;
1326 }
1327 .diff-stat-binary {
1328 color: var(--color-muted);
1329 font-size: var(--text-sm);
1330 font-family: var(--font-mono);
1331 }
1332 .btn-xs {
1333 padding: 1px var(--space-2);
1334 font-size: var(--text-xs);
1335 border: 1px solid var(--color-border);
1336 border-radius: var(--radius-sm);
1337 background: var(--color-bg);
1338 color: var(--color-text);
1339 text-decoration: none;
1340 cursor: pointer;
1341 white-space: nowrap;
1342 font-family: var(--font-mono);
1343 display: inline-flex;
1344 align-items: center;
1345 transition: background 0.1s;
1346 }
1347 .btn-xs:hover {
1348 background: var(--color-bg-inset);
1349 }
1350
1351 /* --- Diff file body --- */
1352 .diff-binary-notice {
1353 padding: var(--space-4) var(--space-6);
1354 font-size: var(--text-sm);
1355 color: var(--color-text-muted);
1356 font-style: italic;
1357 }
1358 .diff-hunk {
1359 border-top: 1px solid var(--color-border-muted);
1360 overflow-x: auto;
1361 }
1362 .diff-hunk:first-child {
1363 border-top: none;
1364 }
1365 .diff-hunk-header {
1366 padding: var(--space-1) var(--space-4);
1367 font-family: var(--font-mono);
1368 font-size: var(--text-xs);
1369 font-weight: normal;
1370 text-align: left;
1371 background: color-mix(
1372 in srgb,
1373 var(--color-merged-bg) 50%,
1374 var(--color-bg)
1375 );
1376 color: var(--color-merged);
1377 border-bottom: 1px solid var(--color-border-muted);
1378 white-space: pre;
1379 }
1380
1381 /* --- Diff table --- */
1382 .diff-table {
1383 min-width: 100%;
1384 border-collapse: collapse;
1385 font-family: var(--font-mono);
1386 font-size: var(--text-xs);
1387 line-height: 1.5;
1388 }
1389 .diff-ln {
1390 width: 44px;
1391 min-width: 44px;
1392 text-align: right;
1393 padding: 0 var(--space-2);
1394 color: var(--color-text-muted);
1395 border-right: 1px solid var(--color-border-muted);
1396 user-select: none;
1397 vertical-align: top;
1398 white-space: nowrap;
1399 }
1400 .diff-sign {
1401 width: 18px;
1402 min-width: 18px;
1403 text-align: center;
1404 padding: 0 var(--space-1);
1405 user-select: none;
1406 vertical-align: top;
1407 }
1408 .diff-code {
1409 padding: 0 var(--space-3);
1410 white-space: pre;
1411 overflow: visible;
1412 vertical-align: top;
1413 word-break: normal;
1414 }
1415 /* Row type backgrounds */
1416 .diff-row-add {
1417 background: color-mix(
1418 in srgb,
1419 var(--color-success-bg) 70%,
1420 transparent
1421 );
1422 }
1423 .diff-row-del {
1424 background: color-mix(in srgb, var(--color-danger-bg) 70%, transparent);
1425 }
1426 .diff-row-add .diff-ln,
1427 .diff-row-add .diff-sign {
1428 background: color-mix(
1429 in srgb,
1430 var(--color-success-bg) 90%,
1431 transparent
1432 );
1433 }
1434 .diff-row-del .diff-ln,
1435 .diff-row-del .diff-sign {
1436 background: color-mix(in srgb, var(--color-danger-bg) 90%, transparent);
1437 }
1438 .diff-row-add .diff-sign {
1439 color: var(--color-success);
1440 font-weight: 700;
1441 }
1442 .diff-row-del .diff-sign {
1443 color: var(--color-danger);
1444 font-weight: 700;
1445 }
1446
1447 /* Shiki dark-mode support in diff code cells */
1448 @media (prefers-color-scheme: dark) {
1449 .diff-code span[style] {
1450 /* biome-ignore lint/complexity/noImportantStyles: required to override shiki inline styles */
1451 color: var(--shiki-dark) !important;
1452 }
1453 }
1454
1455 /* Shiki dark-mode support in file blob view */
1456 @media (prefers-color-scheme: dark) {
1457 .blob-table {
1458 background-color: var(--shiki-dark-bg);
1459 color: var(--shiki-dark);
1460 }
1461 .blob-table span[style] {
1462 /* biome-ignore lint/complexity/noImportantStyles: required to override shiki inline styles */
1463 color: var(--shiki-dark) !important;
1464 }
1465 .blob-table tr:target {
1466 background: color-mix(in srgb, #1c3a52 60%, transparent);
1467 }
1468 .blob-table tr:target .blob-ln {
1469 background: color-mix(in srgb, #1c3a52 80%, transparent);
1470 }
1471 }
1472 :root[data-theme="dark"] .blob-table {
1473 background-color: var(--shiki-dark-bg);
1474 color: var(--shiki-dark);
1475 }
1476 :root[data-theme="dark"] .blob-table span[style] {
1477 /* biome-ignore lint/complexity/noImportantStyles: required to override shiki inline styles */
1478 color: var(--shiki-dark) !important;
1479 }
1480
1481 /* --- Issue / Patch list --- */
1482 .list-header {
1483 display: flex;
1484 align-items: center;
1485 justify-content: space-between;
1486 padding: var(--space-3) var(--space-4);
1487 background: var(--color-bg-subtle);
1488 border: 1px solid var(--color-border);
1489 border-radius: var(--radius-lg) var(--radius-lg) 0 0;
1490 gap: var(--space-4);
1491 }
1492 .list-header-tabs {
1493 display: flex;
1494 gap: var(--space-2);
1495 }
1496 .list-tab {
1497 padding: var(--space-1) var(--space-3);
1498 border-radius: var(--radius-md);
1499 font-size: var(--text-sm);
1500 text-decoration: none;
1501 color: var(--color-text-muted);
1502 }
1503 .list-tab:hover {
1504 background: var(--color-bg-inset);
1505 color: var(--color-text);
1506 }
1507 .list-tab.active {
1508 background: var(--color-bg-inset);
1509 color: var(--color-text);
1510 font-weight: 600;
1511 }
1512 .issue-list {
1513 border: 1px solid var(--color-border);
1514 border-top: none;
1515 border-radius: 0 0 var(--radius-lg) var(--radius-lg);
1516 }
1517 .issue-item {
1518 padding: var(--space-4) var(--space-4);
1519 border-bottom: 1px solid var(--color-border-muted);
1520 }
1521 .issue-item:last-child {
1522 border-bottom: none;
1523 }
1524 .issue-main {
1525 display: flex;
1526 align-items: center;
1527 gap: var(--space-2);
1528 margin-bottom: var(--space-1);
1529 flex-wrap: wrap;
1530 }
1531 .issue-title {
1532 font-weight: 500;
1533 text-decoration: none;
1534 color: var(--color-text);
1535 flex: 1;
1536 }
1537 .issue-title:hover {
1538 color: var(--color-link);
1539 }
1540 .issue-meta {
1541 font-size: var(--text-xs);
1542 color: var(--color-text-muted);
1543 display: flex;
1544 gap: var(--space-3);
1545 }
1546 .issue-status-dot,
1547 .patch-status-dot {
1548 width: 8px;
1549 height: 8px;
1550 border-radius: 50%;
1551 flex-shrink: 0;
1552 }
1553 .issue-status-dot.open,
1554 .patch-status-dot.open {
1555 background: var(--color-success);
1556 }
1557 .issue-status-dot.closed,
1558 .patch-status-dot.closed {
1559 background: var(--color-danger);
1560 }
1561 .issue-status-dot.completed {
1562 background: var(--color-merged);
1563 }
1564 .patch-status-dot.merged {
1565 background: var(--color-merged);
1566 }
1567
1568 /* --- Issue detail / Timeline --- */
1569 .issue-detail-header {
1570 display: flex;
1571 align-items: center;
1572 gap: var(--space-3);
1573 margin-bottom: var(--space-6);
1574 }
1575 .issue-number {
1576 font-size: var(--text-2xl);
1577 font-weight: 600;
1578 color: var(--color-text-muted);
1579 white-space: nowrap;
1580 }
1581 .issue-detail-title {
1582 font-size: var(--text-2xl);
1583 font-weight: 600;
1584 overflow-wrap: anywhere;
1585 }
1586 .issue-detail-meta-actions {
1587 margin-left: auto;
1588 display: flex;
1589 gap: var(--space-2);
1590 }
1591 .patch-author-meta {
1592 display: flex;
1593 align-items: center;
1594 gap: var(--space-2);
1595 font-size: var(--text-xs);
1596 margin-top: calc(-1 * var(--space-4));
1597 margin-bottom: var(--space-6);
1598 }
1599 .patch-author-label {
1600 color: var(--color-text-muted);
1601 }
1602 .patch-author-identity {
1603 font-family: monospace;
1604 }
1605 .timeline-item {
1606 border: 1px solid var(--color-border);
1607 border-radius: var(--radius-lg);
1608 margin-bottom: var(--space-4);
1609 overflow: hidden;
1610 }
1611 .timeline-author {
1612 background: var(--color-bg-subtle);
1613 padding: var(--space-3) var(--space-4);
1614 font-size: var(--text-sm);
1615 display: flex;
1616 align-items: center;
1617 justify-content: space-between;
1618 gap: var(--space-3);
1619 border-bottom: 1px solid var(--color-border);
1620 overflow-wrap: anywhere;
1621 }
1622 .timeline-author time {
1623 color: var(--color-text-muted);
1624 font-size: var(--text-xs);
1625 width: max-content;
1626 }
1627 .timeline-author-right {
1628 margin-left: auto;
1629 display: flex;
1630 align-items: center;
1631 gap: var(--space-2);
1632 }
1633 .edited-indicator {
1634 color: var(--color-text-muted);
1635 font-size: var(--text-xs);
1636 cursor: default;
1637 }
1638
1639 /* --- Avatars --- */
1640 .avatar {
1641 display: inline-flex;
1642 border-radius: 4px;
1643 overflow: hidden;
1644 flex-shrink: 0;
1645 vertical-align: middle;
1646 }
1647 .avatar-img {
1648 width: 100%;
1649 height: 100%;
1650 object-fit: cover;
1651 display: block;
1652 color: transparent;
1653 }
1654 .avatar-placeholder {
1655 display: inline-flex;
1656 align-items: center;
1657 justify-content: center;
1658 border-radius: 4px;
1659 background: var(--color-bg-inset);
1660 color: var(--color-text-muted);
1661 font-weight: 600;
1662 flex-shrink: 0;
1663 vertical-align: middle;
1664 }
1665 .avatar-settings {
1666 display: flex;
1667 align-items: flex-start;
1668 gap: var(--space-5);
1669 }
1670 .avatar-actions {
1671 display: flex;
1672 flex-direction: column;
1673 gap: var(--space-3);
1674 }
1675 .nav-user {
1676 display: inline-flex;
1677 align-items: center;
1678 gap: var(--space-2);
1679 }
1680 .timeline-body {
1681 padding: var(--space-4);
1682 }
1683 .timeline-item-new {
1684 padding: var(--space-4);
1685 }
1686 .timeline-item-new .section-title {
1687 font-size: var(--text-base);
1688 border: none;
1689 padding-bottom: 0;
1690 }
1691 /* Edit <details> (summary only) in .timeline-author; form is a sibling shown via :has() */
1692 .timeline-author-right .inline-edit-details {
1693 border: none;
1694 }
1695 .timeline-author-right .inline-edit-details > summary {
1696 padding: 0;
1697 list-style: none;
1698 }
1699 .timeline-author-right
1700 .inline-edit-details
1701 > summary::-webkit-details-marker {
1702 display: none;
1703 }
1704 .inline-edit-details .when-open {
1705 display: none;
1706 }
1707 .inline-edit-details[open] .when-closed {
1708 display: none;
1709 }
1710 .inline-edit-details[open] .when-open {
1711 display: inline;
1712 }
1713 .inline-edit-form-area {
1714 display: none;
1715 border-top: 1px solid var(--color-border-muted);
1716 }
1717 .timeline-item:has(.inline-edit-details[open]) .inline-edit-form-area {
1718 display: block;
1719 }
1720 .timeline-item:has(.inline-edit-details[open]) .timeline-body {
1721 display: none;
1722 }
1723
1724 /* Title edit in issue/patch header */
1725 .issue-detail-header {
1726 align-items: flex-start;
1727 }
1728 .title-with-edit {
1729 flex: 1;
1730 min-width: 0;
1731 display: flex;
1732 flex-direction: column;
1733 gap: var(--space-1);
1734 }
1735 .title-edit-details {
1736 border: none;
1737 align-self: flex-start;
1738 }
1739 .title-with-edit:has(.title-edit-details[open]) .issue-detail-title {
1740 display: none;
1741 }
1742 .title-with-edit:has(.title-edit-details[open]) > .title-edit-details {
1743 display: none;
1744 }
1745 .title-edit-details > summary {
1746 padding: 0;
1747 list-style: none;
1748 }
1749 .title-edit-details > summary::-webkit-details-marker {
1750 display: none;
1751 }
1752 .title-edit-form-area {
1753 display: none;
1754 }
1755 .title-with-edit:has(.title-edit-details[open]) .title-edit-form-area {
1756 display: flex;
1757 flex: 1;
1758 min-width: 0;
1759 }
1760 .title-edit-form {
1761 display: flex;
1762 flex-direction: column;
1763 gap: var(--space-2);
1764 flex: 1;
1765 min-width: 0;
1766 }
1767 .title-edit-form .form-input {
1768 min-width: 0;
1769 width: 100%;
1770 padding: var(--space-2) var(--space-3);
1771 border: 1px solid var(--color-border);
1772 border-radius: var(--radius-md);
1773 background: var(--color-bg);
1774 color: var(--color-text);
1775 font-size: var(--text-sm);
1776 }
1777 .title-edit-form .form-input:focus {
1778 outline: 2px solid var(--color-accent);
1779 outline-offset: -1px;
1780 border-color: var(--color-accent);
1781 }
1782 .title-edit-actions {
1783 display: flex;
1784 gap: var(--space-2);
1785 }
1786
1787 .inline-edit-form {
1788 padding: var(--space-4);
1789 display: flex;
1790 flex-direction: column;
1791 gap: var(--space-3);
1792 }
1793
1794 /* --- Reactions --- */
1795 .reaction-bar {
1796 display: flex;
1797 flex-wrap: wrap;
1798 gap: var(--space-2);
1799 padding: var(--space-2) var(--space-4);
1800 border-top: 1px solid var(--color-border-muted);
1801 }
1802 .reaction-form {
1803 display: inline;
1804 }
1805 .reaction-btn {
1806 display: inline-flex;
1807 align-items: center;
1808 gap: var(--space-1);
1809 padding: var(--space-1) var(--space-3);
1810 border: 1px solid var(--color-border);
1811 border-radius: var(--radius-full);
1812 background: var(--color-bg-subtle);
1813 color: var(--color-text);
1814 font-size: var(--text-sm);
1815 cursor: pointer;
1816 transition: background 0.1s;
1817 }
1818 .reaction-btn:hover {
1819 background: var(--color-bg-inset);
1820 }
1821 .reaction-btn.reacted {
1822 background: var(--color-accent-bg);
1823 border-color: var(--color-accent);
1824 }
1825 .reaction-picker {
1826 position: relative;
1827 }
1828 .reaction-add-btn {
1829 display: inline-flex;
1830 align-items: center;
1831 justify-content: center;
1832 width: 28px;
1833 height: 28px;
1834 border: 1px dashed var(--color-border);
1835 border-radius: var(--radius-full);
1836 background: transparent;
1837 cursor: pointer;
1838 font-size: var(--text-base);
1839 color: var(--color-text-muted);
1840 list-style: none;
1841 }
1842 .reaction-add-btn::-webkit-details-marker {
1843 display: none;
1844 }
1845 .reaction-picker-dropdown {
1846 position: absolute;
1847 bottom: calc(100% + var(--space-2));
1848 left: 0;
1849 background: var(--color-bg);
1850 border: 1px solid var(--color-border);
1851 border-radius: var(--radius-lg);
1852 padding: var(--space-2);
1853 display: flex;
1854 gap: var(--space-1);
1855 z-index: 10;
1856 }
1857 .reaction-picker-btn {
1858 background: none;
1859 border: none;
1860 font-size: 1.25rem;
1861 cursor: pointer;
1862 padding: var(--space-1);
1863 border-radius: var(--radius-sm);
1864 }
1865 .reaction-picker-btn:hover {
1866 background: var(--color-bg-inset);
1867 }
1868
1869 /* --- Patch subview tabs --- */
1870 .patch-tab-nav {
1871 display: flex;
1872 border-bottom: 1px solid var(--color-border);
1873 margin-bottom: var(--space-6);
1874 }
1875 .tab-count {
1876 display: inline-flex;
1877 align-items: center;
1878 justify-content: center;
1879 min-width: 1.4em;
1880 padding: 0 var(--space-1);
1881 margin-left: var(--space-1);
1882 font-size: var(--text-xs);
1883 font-weight: 500;
1884 background: var(--color-bg-inset);
1885 border-radius: 999px;
1886 color: var(--color-text-muted);
1887 }
1888
1889 /* --- Patch apply status --- */
1890 .apply-status {
1891 margin: var(--space-4) 0;
1892 }
1893 .apply-result {
1894 display: flex;
1895 align-items: flex-start;
1896 gap: var(--space-2);
1897 padding: var(--space-3) var(--space-4);
1898 border-radius: var(--radius-md);
1899 font-size: var(--text-sm);
1900 flex-direction: column;
1901 }
1902 .apply-result > div {
1903 display: flex;
1904 gap: var(--space-2);
1905 align-items: center;
1906 }
1907 .apply-clean {
1908 background: var(--color-success-bg);
1909 color: var(--color-success);
1910 border: 1px solid var(--color-success);
1911 }
1912 .apply-conflict {
1913 background: var(--color-danger-bg);
1914 color: var(--color-danger);
1915 border: 1px solid var(--color-danger);
1916 }
1917 .apply-checking,
1918 .apply-unknown {
1919 color: var(--color-text-muted);
1920 font-style: italic;
1921 font-size: var(--text-sm);
1922 }
1923 .apply-output {
1924 font-family: var(--font-mono);
1925 font-size: var(--text-xs);
1926 white-space: pre-wrap;
1927 margin-top: var(--space-2);
1928 padding: var(--space-2);
1929 background: rgba(0, 0, 0, 0.05);
1930 border-radius: var(--radius-sm);
1931 width: 100%;
1932 }
1933 .patch-actions {
1934 display: flex;
1935 gap: var(--space-3);
1936 margin: var(--space-4) 0;
1937 flex-wrap: wrap;
1938 }
1939 .patch-card-title-row {
1940 display: flex;
1941 align-items: flex-start;
1942 gap: var(--space-3);
1943 justify-content: space-between;
1944 margin-bottom: var(--space-3);
1945 }
1946 .patch-card-title-row .commit-card-subject {
1947 margin-bottom: 0;
1948 }
1949 .patch-card-description {
1950 margin-top: var(--space-4);
1951 padding-top: var(--space-4);
1952 border-top: 1px solid var(--color-border-muted);
1953 }
1954
1955 /* --- Repo home layout --- */
1956 .repo-home-layout {
1957 display: grid;
1958 gap: var(--space-8);
1959 }
1960 @media (min-width: 768px) {
1961 .repo-home-layout {
1962 grid-template-columns: 1fr 1fr;
1963 }
1964 }
1965 .readme-section {
1966 border: 1px solid var(--color-border);
1967 border-radius: var(--radius-lg);
1968 overflow: hidden;
1969 }
1970 .readme-header {
1971 background: var(--color-bg-subtle);
1972 padding: var(--space-3) var(--space-4);
1973 font-size: var(--text-sm);
1974 font-weight: 500;
1975 border-bottom: 1px solid var(--color-border);
1976 }
1977 /* --- Code setup block --- */
1978 .code-setup {
1979 background: var(--color-bg-subtle);
1980 border: 1px solid var(--color-border);
1981 border-radius: var(--radius-lg);
1982 padding: var(--space-4);
1983 font-size: var(--text-sm);
1984 margin-top: var(--space-4);
1985 overflow: auto;
1986 text-align: left;
1987 }
1988 .code-plain {
1989 background: var(--color-bg-subtle);
1990 padding: var(--space-4);
1991 overflow: auto;
1992 font-size: var(--text-sm);
1993 line-height: 1.6;
1994 }
1995
1996 /* --- Markdown body --- */
1997 .markdown-body {
1998 font-size: var(--text-sm);
1999 line-height: 1.6;
2000 color: var(--color-text);
2001 }
2002 .markdown-body h1,
2003 .markdown-body h2,
2004 .markdown-body h3,
2005 .markdown-body h4,
2006 .markdown-body h5,
2007 .markdown-body h6 {
2008 margin-top: var(--space-6);
2009 margin-bottom: var(--space-3);
2010 }
2011 .markdown-body p {
2012 margin-bottom: var(--space-4);
2013 }
2014 .markdown-body a {
2015 color: var(--color-link);
2016 }
2017 .markdown-body code {
2018 background: var(--color-bg-inset);
2019 padding: 0.1em 0.3em;
2020 border-radius: var(--radius-sm);
2021 font-size: 0.9em;
2022 }
2023 .markdown-body pre {
2024 background: var(--color-bg-subtle);
2025 border: 1px solid var(--color-border);
2026 border-radius: var(--radius-md);
2027 padding: var(--space-4);
2028 overflow: auto;
2029 margin-bottom: var(--space-4);
2030 }
2031 .markdown-body pre code {
2032 background: none;
2033 padding: 0;
2034 }
2035 .markdown-body ul,
2036 .markdown-body ol {
2037 padding-left: var(--space-6);
2038 margin-bottom: var(--space-4);
2039 }
2040 .markdown-body ul {
2041 list-style: disc;
2042 }
2043 .markdown-body ol {
2044 list-style: decimal;
2045 }
2046 .markdown-body li {
2047 margin-bottom: var(--space-1);
2048 }
2049 .markdown-body blockquote {
2050 border-left: 3px solid var(--color-border);
2051 padding-left: var(--space-4);
2052 color: var(--color-text-muted);
2053 margin: var(--space-4) 0;
2054 }
2055 .markdown-body table {
2056 width: 100%;
2057 border-collapse: collapse;
2058 margin-bottom: var(--space-4);
2059 }
2060 .markdown-body th,
2061 .markdown-body td {
2062 padding: var(--space-2) var(--space-3);
2063 border: 1px solid var(--color-border);
2064 }
2065 .markdown-body th {
2066 background: var(--color-bg-subtle);
2067 font-weight: 600;
2068 }
2069 .markdown-body hr {
2070 border: none;
2071 border-top: 1px solid var(--color-border);
2072 margin: var(--space-6) 0;
2073 }
2074 .markdown-body img {
2075 max-width: 100%;
2076 border-radius: var(--radius-md);
2077 }
2078 .markdown-body details {
2079 margin-bottom: var(--space-4);
2080 }
2081 .markdown-body summary {
2082 cursor: pointer;
2083 font-weight: 500;
2084 }
2085 .readme-section .markdown-body {
2086 padding: var(--space-4);
2087 }
2088
2089 /* --- Search row (search form + sort select) --- */
2090 .search-row {
2091 display: flex;
2092 align-items: center;
2093 gap: var(--space-3);
2094 margin-bottom: var(--space-5);
2095 }
2096 .search-form {
2097 flex: 1;
2098 }
2099 .repo-sort-select {
2100 padding: var(--space-1) var(--space-2);
2101 padding-right: var(--space-5);
2102 border: 1px solid var(--color-border);
2103 border-radius: var(--radius-md);
2104 background: var(--color-bg-subtle);
2105 font-size: var(--text-sm);
2106 color: var(--color-text);
2107 cursor: pointer;
2108 appearance: auto;
2109 }
2110 .repo-sort-select:hover {
2111 border-color: var(--color-text-muted);
2112 }
2113 .repo-sort-select:focus {
2114 outline: 2px solid var(--color-accent);
2115 outline-offset: -1px;
2116 }
2117 .search-input-wrap {
2118 display: flex;
2119 gap: var(--space-2);
2120 }
2121 .search-input {
2122 flex: 1;
2123 padding: var(--space-2) var(--space-3);
2124 border: 1px solid var(--color-border);
2125 border-radius: var(--radius-md);
2126 background: var(--color-bg);
2127 color: var(--color-text);
2128 font-size: var(--text-sm);
2129 }
2130 .search-input:focus {
2131 outline: 2px solid var(--color-accent);
2132 outline-offset: -1px;
2133 border-color: var(--color-accent);
2134 }
2135
2136 /* --- Issue close bar --- */
2137 .issue-close-bar {
2138 display: flex;
2139 justify-content: flex-end;
2140 padding: var(--space-3) 0;
2141 border-top: 1px solid var(--color-border-muted);
2142 margin-top: var(--space-2);
2143 }
2144
2145 /* --- Auth divider --- */
2146 .auth-divider {
2147 display: flex;
2148 align-items: center;
2149 gap: var(--space-3);
2150 margin: var(--space-4) 0;
2151 color: var(--color-text-muted);
2152 font-size: var(--text-sm);
2153 }
2154 .auth-divider::before,
2155 .auth-divider::after {
2156 content: "";
2157 flex: 1;
2158 height: 1px;
2159 background: var(--color-border);
2160 }
2161
2162 /* --- Passkey UI in settings --- */
2163 .passkey-actions {
2164 display: flex;
2165 flex-direction: column;
2166 gap: var(--space-3);
2167 align-items: flex-start;
2168 margin-top: var(--space-3);
2169 }
2170 .passkey-status {
2171 font-size: var(--text-sm);
2172 }
2173
2174 /* --- Danger zone --- */
2175 .danger-zone {
2176 margin-top: var(--space-8);
2177 }
2178 .danger-title {
2179 color: var(--color-danger);
2180 border-bottom-color: var(--color-danger);
2181 }
2182 .danger-card {
2183 border-color: var(--color-danger);
2184 background: var(--color-danger-bg);
2185 }
2186 .danger-item {
2187 display: flex;
2188 align-items: center;
2189 justify-content: space-between;
2190 gap: var(--space-4);
2191 flex-wrap: wrap;
2192 }
2193 .danger-item p {
2194 margin: var(--space-1) 0 0;
2195 }
2196 .btn-danger {
2197 background: var(--color-danger);
2198 border-color: transparent;
2199 color: #fff;
2200 }
2201 .btn-danger:hover {
2202 filter: brightness(0.9);
2203 }
2204
2205 /* --- Release list items --- */
2206 .release-item-header {
2207 display: flex;
2208 gap: var(--space-3);
2209 align-items: flex-start;
2210 }
2211 .release-item-main {
2212 flex: 1;
2213 min-width: 0;
2214 }
2215 .release-item-title {
2216 font-size: var(--text-lg);
2217 font-weight: 700;
2218 text-decoration: none;
2219 color: var(--color-text);
2220 display: block;
2221 margin-bottom: var(--space-1);
2222 }
2223 .release-item-title:hover {
2224 color: var(--color-link);
2225 }
2226 .release-item-meta {
2227 display: flex;
2228 flex-wrap: wrap;
2229 gap: var(--space-3);
2230 align-items: center;
2231 font-size: var(--text-xs);
2232 color: var(--color-text-muted);
2233 }
2234 .release-item-date {
2235 display: flex;
2236 flex-direction: column;
2237 align-items: flex-end;
2238 gap: var(--space-2);
2239 font-size: var(--text-xs);
2240 color: var(--color-text-muted);
2241 white-space: nowrap;
2242 flex-shrink: 0;
2243 }
2244
2245 /* --- Release notes preview in list --- */
2246 .release-notes-section {
2247 margin-top: var(--space-3);
2248 }
2249 .release-notes-label {
2250 font-size: var(--text-xs);
2251 font-weight: 600;
2252 color: var(--color-text-muted);
2253 text-transform: uppercase;
2254 letter-spacing: 0.05em;
2255 margin-bottom: var(--space-2);
2256 }
2257 .notes-expand > summary {
2258 list-style: none;
2259 cursor: pointer;
2260 outline: none;
2261 }
2262 .notes-expand > summary::-webkit-details-marker {
2263 display: none;
2264 }
2265 .notes-preview {
2266 max-height: calc(5 * 1.6em);
2267 overflow: hidden;
2268 position: relative;
2269 white-space: pre-wrap;
2270 font-size: var(--text-sm);
2271 color: var(--color-text);
2272 line-height: 1.6;
2273 word-break: break-word;
2274 margin-bottom: var(--space-1);
2275 }
2276 .notes-preview::after {
2277 content: "";
2278 position: absolute;
2279 bottom: 0;
2280 left: 0;
2281 right: 0;
2282 height: 2.5em;
2283 background: linear-gradient(transparent, var(--color-bg));
2284 pointer-events: none;
2285 }
2286 .notes-expand[open] .notes-preview {
2287 display: none;
2288 }
2289 .notes-full {
2290 padding-top: var(--space-3);
2291 padding-bottom: var(--space-1);
2292 }
2293 .notes-expand[open] {
2294 display: flex;
2295 flex-direction: column;
2296 }
2297 .notes-expand[open] > summary {
2298 order: 1;
2299 }
2300 .notes-expand[open] > .notes-full {
2301 order: 0;
2302 }
2303 .notes-toggle-label {
2304 display: inline-block;
2305 font-size: var(--text-xs);
2306 color: var(--color-link);
2307 margin-top: var(--space-1);
2308 }
2309 .notes-toggle-label:hover {
2310 text-decoration: underline;
2311 }
2312 .notes-toggle-label::before {
2313 content: "Show more ↓";
2314 }
2315 .notes-expand[open] .notes-toggle-label::before {
2316 content: "Show less ↑";
2317 }
2318
2319 /* --- Release detail --- */
2320 .release-detail {
2321 padding: var(--space-6) 0;
2322 }
2323 .release-header {
2324 margin-bottom: var(--space-6);
2325 }
2326 .release-notes {
2327 margin-bottom: var(--space-6);
2328 }
2329 .release-assets {
2330 margin-bottom: var(--space-6);
2331 }
2332 .release-assets-heading {
2333 font-size: var(--text-base);
2334 font-weight: 600;
2335 margin-bottom: var(--space-3);
2336 }
2337 .asset-list {
2338 border: 1px solid var(--color-border);
2339 border-radius: var(--radius-lg);
2340 overflow: hidden;
2341 }
2342 .asset-item {
2343 display: flex;
2344 align-items: center;
2345 gap: var(--space-4);
2346 padding: var(--space-3) var(--space-4);
2347 border-bottom: 1px solid var(--color-border-muted);
2348 font-size: var(--text-sm);
2349 }
2350 .asset-item:last-child {
2351 border-bottom: none;
2352 }
2353 .asset-name {
2354 flex: 1;
2355 color: var(--color-link);
2356 text-decoration: none;
2357 font-family: var(--font-mono);
2358 font-size: var(--text-xs);
2359 }
2360 .asset-name:hover {
2361 text-decoration: underline;
2362 }
2363 .asset-name-pending {
2364 color: var(--color-text-muted);
2365 cursor: default;
2366 }
2367 .asset-item-pending {
2368 opacity: 0.6;
2369 }
2370 .asset-size,
2371 .asset-meta {
2372 color: var(--color-text-muted);
2373 font-size: var(--text-xs);
2374 white-space: nowrap;
2375 }
2376 .release-back {
2377 margin-top: var(--space-4);
2378 display: flex;
2379 gap: var(--space-3);
2380 align-items: center;
2381 justify-content: space-between;
2382 }
2383}
2384
2385/* ============================================================
2386 @layer utilities
2387 ============================================================ */
2388@layer utilities {
2389 .text-muted {
2390 color: var(--color-text-muted);
2391 }
2392 .text-sm {
2393 font-size: var(--text-sm);
2394 }
2395 .text-xs {
2396 font-size: var(--text-xs);
2397 }
2398 .font-mono {
2399 font-family: var(--font-mono);
2400 }
2401 .mt-1 {
2402 margin-top: var(--space-1);
2403 }
2404 .mt-2 {
2405 margin-top: var(--space-2);
2406 }
2407 .mt-4 {
2408 margin-top: var(--space-4);
2409 }
2410 .mt-6 {
2411 margin-top: var(--space-6);
2412 }
2413 .mb-4 {
2414 margin-bottom: var(--space-4);
2415 }
2416 .flex {
2417 display: flex;
2418 }
2419 .gap-2 {
2420 gap: var(--space-2);
2421 }
2422 .gap-4 {
2423 gap: var(--space-4);
2424 }
2425 .items-center {
2426 align-items: center;
2427 }
2428 .justify-between {
2429 justify-content: space-between;
2430 }
2431 .hidden {
2432 display: none;
2433 }
2434}
2435
2436/* ============================================================
2437 Pagination
2438 ============================================================ */
2439.commit-verify-hint {
2440 margin-bottom: var(--space-4);
2441 font-size: var(--text-xs);
2442 color: var(--color-text-muted);
2443}
2444.commit-verify-hint code {
2445 word-break: break-all;
2446}
2447.commit-cursor-nav {
2448 display: flex;
2449 justify-content: space-between;
2450 border-top: 1px solid var(--color-border);
2451 margin-top: var(--space-2);
2452 padding: var(--space-4) 0 var(--space-2);
2453}
2454
2455.commit-cursor-prev {
2456 flex: 1;
2457}
2458.commit-cursor-next {
2459 flex: 1;
2460 text-align: right;
2461}
2462
2463.pagination {
2464 display: grid;
2465 grid-template-columns: 1fr auto 1fr;
2466 align-items: center;
2467 border-top: 1px solid var(--color-border);
2468 margin-top: var(--space-2);
2469 padding: var(--space-4) 0 var(--space-2);
2470}
2471
2472.pagination-prev {
2473 justify-self: start;
2474}
2475.pagination-next {
2476 justify-self: end;
2477}
2478
2479.pagination-info {
2480 justify-self: center;
2481 font-size: var(--text-sm);
2482 color: var(--color-text-muted);
2483}
2484
2485.pagination-btn {
2486 display: inline-flex;
2487 align-items: center;
2488 gap: var(--space-1);
2489 padding: var(--space-1) var(--space-3);
2490 border: 1px solid var(--color-border);
2491 border-radius: var(--radius-md);
2492 font-size: var(--text-sm);
2493 font-weight: 500;
2494 text-decoration: none;
2495 color: var(--color-text);
2496 background: var(--color-bg-subtle);
2497 transition:
2498 background 0.1s,
2499 border-color 0.1s;
2500 white-space: nowrap;
2501}
2502
2503.pagination-btn:hover {
2504 background: var(--color-bg-inset);
2505 border-color: var(--color-border);
2506 color: var(--color-text);
2507 text-decoration: none;
2508}
2509
2510/* Settings */
2511.theme-options {
2512 display: flex;
2513 gap: var(--space-4);
2514 margin-bottom: var(--space-4);
2515 flex-wrap: wrap;
2516}
2517.theme-option {
2518 display: flex;
2519 align-items: center;
2520 gap: var(--space-2);
2521 cursor: pointer;
2522 font-size: var(--text-sm);
2523}
2524.settings-form {
2525 display: flex;
2526 flex-direction: column;
2527 gap: var(--space-4);
2528}
2529.passkey-list {
2530 display: flex;
2531 flex-direction: column;
2532 gap: var(--space-2);
2533 margin-bottom: var(--space-4);
2534}
2535.passkey-item {
2536 display: flex;
2537 align-items: center;
2538 gap: var(--space-3);
2539 padding: var(--space-2) 0;
2540 border-bottom: 1px solid var(--color-border-muted);
2541 font-size: var(--text-sm);
2542}
2543.passkey-item:last-child {
2544 border-bottom: none;
2545}
2546.passkey-date {
2547 flex: 1;
2548 color: var(--color-text-muted);
2549}
2550.ssh-key-info {
2551 flex: 1;
2552 display: flex;
2553 flex-direction: column;
2554 gap: var(--space-1);
2555 min-width: 0;
2556}
2557.ssh-key-name {
2558 font-weight: 500;
2559}
2560.ssh-key-fingerprint {
2561 font-family: var(--font-mono);
2562 font-size: var(--text-xs);
2563 overflow: hidden;
2564 text-overflow: ellipsis;
2565 white-space: nowrap;
2566}
2567.form-textarea {
2568 resize: vertical;
2569 min-height: 4.5rem;
2570 font-family: var(--font-mono);
2571 font-size: var(--text-sm);
2572}
2573/* Clone popup */
2574.clone-popup-details {
2575 position: relative;
2576 display: inline-block;
2577}
2578.clone-popup-details > summary {
2579 list-style: none;
2580}
2581.clone-popup-details > summary::-webkit-details-marker {
2582 display: none;
2583}
2584.clone-popup {
2585 position: absolute;
2586 right: 1rem;
2587 top: calc(100% + var(--space-2));
2588 background: var(--color-bg);
2589 border: 1px solid var(--color-border);
2590 border-radius: var(--radius-lg);
2591 padding: var(--space-3);
2592 min-width: 22rem;
2593 z-index: 100;
2594 box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);
2595 display: flex;
2596 flex-direction: column;
2597 gap: var(--space-2);
2598}
2599.clone-url-row {
2600 display: flex;
2601 align-items: center;
2602 gap: var(--space-2);
2603}
2604.clone-url-label {
2605 font-size: var(--text-xs);
2606 font-weight: 600;
2607 color: var(--color-text-muted);
2608 text-transform: uppercase;
2609 letter-spacing: 0.05em;
2610 min-width: 2.75rem;
2611}
2612.clone-url-input {
2613 flex: 1;
2614 font-family: var(--font-mono);
2615 font-size: var(--text-sm);
2616 background: var(--color-bg-subtle);
2617 border: 1px solid var(--color-border-muted);
2618 border-radius: var(--radius-md);
2619 padding: var(--space-1) var(--space-2);
2620 color: var(--color-text);
2621 cursor: text;
2622 min-width: 0;
2623}
2624.user-list {
2625 display: flex;
2626 flex-direction: column;
2627 gap: var(--space-2);
2628 margin-bottom: var(--space-6);
2629}
2630.user-item {
2631 display: flex;
2632 align-items: center;
2633 gap: var(--space-3);
2634 padding: var(--space-2) 0;
2635 border-bottom: 1px solid var(--color-border-muted);
2636 font-size: var(--text-sm);
2637}
2638.user-item:last-child {
2639 border-bottom: none;
2640}
2641.user-name {
2642 font-weight: 500;
2643 flex: 1;
2644}
2645.user-date {
2646 color: var(--color-text-muted);
2647 font-size: var(--text-xs);
2648}
2649