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