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