Krolyxon
Commit 4e844bb

ferreniumassetscssrepo.css

1022 lines · 17.6 KB · CSS

1/* Repository pages: nav, ref picker, summary, tree, blob, refs, Markdown. */
2
3.mono {
4 font-family: var(--font-mono);
5}
6
7.icon {
8 width: 16px;
9 height: 16px;
10 flex: none;
11}
12
13/* ---- Repository bar: [ SUMMARY ] TREE REFS · ref picker ------------- */
14
15.repo-bar {
16 display: flex;
17 flex-wrap: wrap;
18 align-items: center;
19 justify-content: space-between;
20 gap: var(--space-sm) var(--space-md);
21 padding-top: var(--space-sm);
22}
23
24.bracket-nav {
25 overflow-x: auto;
26 scrollbar-width: none;
27}
28
29.bracket-nav a {
30 white-space: nowrap;
31}
32
33.ref-picker {
34 position: relative;
35}
36
37.ref-picker summary {
38 display: inline-flex;
39 align-items: center;
40 gap: var(--space-sm);
41 min-height: 44px;
42 padding: 0 var(--space-md);
43 border: 1px solid var(--border-visible);
44 border-radius: 999px;
45 list-style: none;
46 cursor: pointer;
47 color: var(--text-secondary);
48 transition: border-color var(--dur-micro) var(--ease);
49}
50
51.ref-picker summary::-webkit-details-marker {
52 display: none;
53}
54
55.ref-picker summary:hover,
56.ref-picker[open] summary {
57 border-color: var(--text-secondary);
58}
59
60.ref-current {
61 max-width: 24ch;
62 overflow: hidden;
63 text-overflow: ellipsis;
64 white-space: nowrap;
65 font-family: var(--font-mono);
66 font-size: var(--caption);
67 color: var(--text-primary);
68}
69
70.ref-picker[open] .chevron {
71 transform: rotate(180deg);
72}
73
74.ref-menu {
75 position: absolute;
76 z-index: 10;
77 right: 0;
78 top: calc(100% + var(--space-xs));
79 width: max-content;
80 min-width: 240px;
81 max-width: min(360px, calc(100vw - 2 * var(--gutter)));
82 max-height: 60vh;
83 overflow-y: auto;
84 padding: var(--space-sm) 0;
85 border: 1px solid var(--border-visible);
86 border-radius: 8px;
87 background: var(--surface-raised);
88}
89
90.ref-group {
91 padding: var(--space-sm) var(--space-md) var(--space-xs);
92 color: var(--text-disabled);
93}
94
95.ref-menu ul {
96 list-style: none;
97}
98
99.ref-menu li a {
100 display: flex;
101 align-items: center;
102 min-height: 44px;
103 padding: 0 var(--space-md);
104 border-left: 2px solid transparent;
105 font-family: var(--font-mono);
106 font-size: var(--caption);
107 color: var(--text-primary);
108 overflow-wrap: anywhere;
109}
110
111.ref-menu li a:hover {
112 color: var(--text-display);
113 text-decoration: none;
114}
115
116.ref-menu li a.active {
117 border-left-color: var(--accent);
118 color: var(--text-display);
119}
120
121.ref-all {
122 display: flex;
123 align-items: center;
124 min-height: 44px;
125 padding: 0 var(--space-md);
126 margin-top: var(--space-xs);
127 border-top: 1px solid var(--border);
128}
129
130/* ---- Breadcrumb: secondary path, current segment in display ------------ */
131
132.crumbs {
133 padding-top: var(--space-2xl);
134 font-size: var(--heading);
135 font-weight: 400;
136 line-height: 1.25;
137 color: var(--text-secondary);
138 overflow-wrap: anywhere;
139}
140
141.crumbs a {
142 color: var(--text-secondary);
143}
144
145.crumbs a:hover {
146 color: var(--text-display);
147}
148
149.crumb-sep {
150 padding: 0 var(--space-sm);
151 color: var(--text-disabled);
152}
153
154.crumb-here {
155 color: var(--text-display);
156}
157
158/* ---- Summary ------------------------------------------------------------ */
159
160.repo-hero {
161 padding-top: var(--space-2xl);
162}
163
164.repo-title {
165 font-weight: 500;
166 overflow-wrap: anywhere;
167}
168
169.repo-about {
170 margin-top: var(--space-sm);
171 max-width: 60ch;
172 color: var(--text-secondary);
173}
174
175.repo-grid {
176 display: grid;
177 grid-template-columns: minmax(0, 1fr);
178 gap: var(--space-2xl);
179 margin-top: var(--space-xl);
180}
181
182@media (min-width: 768px) {
183 .repo-grid {
184 grid-template-columns: minmax(0, 1fr) var(--rail);
185 gap: var(--space-xl);
186 }
187}
188
189@media (min-width: 1200px) {
190 .repo-grid {
191 gap: var(--space-2xl);
192 }
193}
194
195.rail {
196 display: flex;
197 flex-direction: column;
198 gap: var(--space-xl);
199 min-width: 0;
200}
201
202.stats {
203 border-top: 1px solid var(--border);
204}
205
206.stat {
207 display: flex;
208 align-items: baseline;
209 justify-content: space-between;
210 gap: var(--space-md);
211 padding-block: 12px;
212 border-bottom: 1px solid var(--border);
213}
214
215.stat dd {
216 margin: 0;
217 font-family: var(--font-mono);
218 font-size: var(--body-sm);
219 color: var(--text-primary);
220 text-align: right;
221 overflow-wrap: anywhere;
222}
223
224.rail-head {
225 display: flex;
226 align-items: center;
227 justify-content: space-between;
228 gap: var(--space-sm);
229 min-height: 30px;
230}
231
232.rail-block > .label {
233 display: block;
234}
235
236.clone-row {
237 display: flex;
238 align-items: center;
239 gap: var(--space-xs);
240 margin-top: var(--space-sm);
241}
242
243.clone-input {
244 flex: 1;
245 min-width: 0;
246 min-height: 44px;
247 padding: 0;
248 border: 0;
249 border-bottom: 1px solid var(--border-visible);
250 border-radius: 0;
251 background: transparent;
252 font-family: var(--font-mono);
253 font-size: var(--caption);
254 color: var(--text-primary);
255 outline: none;
256 text-overflow: ellipsis;
257}
258
259.clone-input:focus {
260 border-bottom-color: var(--text-primary);
261}
262
263.icon-btn {
264 display: inline-flex;
265 align-items: center;
266 justify-content: center;
267 width: 44px;
268 height: 44px;
269 flex: none;
270 padding: 0;
271 border: 0;
272 background: none;
273 color: var(--text-secondary);
274 transition: color var(--dur-micro) var(--ease);
275}
276
277.icon-btn:hover {
278 color: var(--text-display);
279}
280
281/* Copying and switching protocols need JS; without it every URL shows. */
282html:not(.js) .clone-switch,
283html:not(.js) [data-copy],
284html:not(.js) .copy-status {
285 display: none;
286}
287
288.copy-status {
289 min-height: 1.4em;
290 margin-top: var(--space-xs);
291}
292
293.latest-subject {
294 margin-top: var(--space-sm);
295 color: var(--text-primary);
296 overflow-wrap: anywhere;
297}
298
299.latest-meta {
300 margin-top: var(--space-xs);
301 font-family: var(--font-mono);
302 font-size: var(--caption);
303 color: var(--text-secondary);
304}
305
306.sha {
307 font-family: var(--font-mono);
308}
309
310/* ---- Tree listing --------------------------------------------------------- */
311
312.tree {
313 list-style: none;
314 margin-top: var(--space-lg);
315 border-top: 1px solid var(--border);
316}
317
318.repo-main > .tree:first-child {
319 margin-top: 0;
320}
321
322.tree-row {
323 display: flex;
324 align-items: center;
325 justify-content: space-between;
326 gap: var(--space-md);
327 min-height: 44px;
328 border-bottom: 1px solid var(--border);
329}
330
331.tree-name {
332 display: flex;
333 align-items: center;
334 gap: var(--space-sm);
335 flex: 1;
336 min-width: 0;
337 min-height: 44px;
338 color: var(--text-primary);
339 overflow-wrap: anywhere;
340}
341
342.tree-name .icon {
343 color: var(--text-disabled);
344}
345
346.tree-name .icon-folder {
347 color: var(--text-secondary);
348}
349
350.tree-meta {
351 flex: none;
352 font-family: var(--font-mono);
353 font-size: var(--caption);
354 color: var(--text-disabled);
355 white-space: nowrap;
356}
357
358.tree-foot {
359 margin-top: var(--space-md);
360}
361
362/* ---- README ------------------------------------------------------------- */
363
364.readme {
365 margin-top: var(--space-2xl);
366}
367
368.readme-name {
369 display: inline-block;
370 margin-bottom: var(--space-md);
371 color: var(--text-secondary);
372}
373
374/* ---- Blob --------------------------------------------------------------- */
375
376.blob-bar {
377 display: flex;
378 flex-wrap: wrap;
379 align-items: center;
380 justify-content: space-between;
381 gap: var(--space-sm) var(--space-md);
382 margin-top: var(--space-md);
383}
384
385.blob-actions {
386 display: flex;
387 flex-wrap: wrap;
388 align-items: center;
389 gap: var(--space-md);
390}
391
392.blob-note {
393 padding-block: var(--space-2xl);
394 border-top: 1px solid var(--border);
395 overflow-wrap: anywhere;
396}
397
398.code-wrap {
399 margin-top: var(--space-sm);
400 border-top: 1px solid var(--border);
401 border-bottom: 1px solid var(--border);
402 overflow-x: auto;
403}
404
405.code {
406 width: 100%;
407 border-collapse: collapse;
408 font-family: var(--font-code);
409 font-size: 13px;
410 line-height: 20px;
411 tab-size: 4;
412}
413
414.code td {
415 padding: 0;
416 vertical-align: top;
417}
418
419.code .ln {
420 width: 1%;
421 border-left: 2px solid transparent;
422 text-align: right;
423 user-select: none;
424 -webkit-user-select: none;
425}
426
427.code .ln a {
428 display: block;
429 padding: 0 var(--space-md) 0 var(--space-sm);
430 color: var(--text-disabled);
431}
432
433.code .ln a:hover {
434 color: var(--text-secondary);
435 text-decoration: none;
436}
437
438.code .lc {
439 padding: 0 var(--space-md);
440 white-space: pre;
441 color: var(--text-primary);
442}
443
444.code tr:first-child td {
445 padding-top: var(--space-sm);
446}
447
448.code tr:last-child td {
449 padding-bottom: var(--space-sm);
450}
451
452/* Selected lines: #L12 (CSS) or #L12-L20 (JS). */
453.code tr:target,
454.code tr.selected {
455 background: var(--surface-raised);
456}
457
458.code tr:target .ln,
459.code tr.selected .ln {
460 border-left-color: var(--accent);
461}
462
463.code tr:target .ln a,
464.code tr.selected .ln a {
465 color: var(--text-display);
466}
467
468/* The one break on the blob page: images float on a dot grid. */
469.image-view {
470 display: flex;
471 justify-content: center;
472 margin-top: var(--space-sm);
473 padding: var(--space-xl) var(--space-md);
474 border: 1px solid var(--border);
475 border-radius: 4px;
476 background-image: radial-gradient(circle, var(--border-visible) 1px, transparent 1px);
477 background-size: 16px 16px;
478}
479
480.image-view img {
481 max-height: 70vh;
482 object-fit: contain;
483}
484
485.blob-markdown {
486 margin-top: var(--space-xl);
487}
488
489/* ---- Refs --------------------------------------------------------------- */
490
491.refs-section {
492 margin-top: var(--space-2xl);
493}
494
495.table-wrap {
496 overflow-x: auto;
497}
498
499.data-table {
500 width: 100%;
501 border-collapse: collapse;
502}
503
504.data-table th {
505 padding: 12px 16px 12px 0;
506 border-bottom: 1px solid var(--border-visible);
507 text-align: left;
508 font-weight: 400;
509 white-space: nowrap;
510}
511
512.data-table td {
513 padding: 12px 16px 12px 0;
514 border-bottom: 1px solid var(--border);
515 vertical-align: baseline;
516}
517
518.data-table .num {
519 padding-right: 0;
520 text-align: right;
521 white-space: nowrap;
522 font-family: var(--font-mono);
523 font-size: var(--caption);
524 color: var(--text-disabled);
525}
526
527.data-table th.num {
528 font-size: var(--label);
529 color: var(--text-secondary);
530}
531
532.ref-name {
533 font-family: var(--font-mono);
534 font-size: var(--body-sm);
535 overflow-wrap: anywhere;
536}
537
538.ref-subject {
539 color: var(--text-secondary);
540 overflow-wrap: anywhere;
541}
542
543.chip {
544 display: inline-block;
545 margin-left: var(--space-sm);
546 padding: 2px var(--space-sm);
547 border: 1px solid var(--border-visible);
548 border-radius: 999px;
549 font-family: var(--font-mono);
550 font-size: var(--label);
551 letter-spacing: 0.08em;
552 text-transform: uppercase;
553 color: var(--text-secondary);
554 white-space: nowrap;
555}
556
557/* ---- Log ------------------------------------------------------------------ */
558
559.log-tools {
560 margin-top: var(--space-lg);
561 max-width: 420px;
562}
563
564.log-day {
565 margin-top: var(--space-xl);
566}
567
568.log {
569 list-style: none;
570 border-top: 1px solid var(--border);
571}
572
573.log-row {
574 display: flex;
575 align-items: baseline;
576 justify-content: space-between;
577 gap: var(--space-md);
578 padding-block: 12px;
579 border-bottom: 1px solid var(--border);
580}
581
582.log-main {
583 min-width: 0;
584}
585
586.log-subject {
587 color: var(--text-primary);
588 overflow-wrap: anywhere;
589}
590
591.log-meta {
592 margin-top: var(--space-2xs);
593 font-family: var(--font-mono);
594 font-size: var(--caption);
595 color: var(--text-secondary);
596}
597
598.log-sha {
599 flex: none;
600 font-size: var(--caption);
601 color: var(--interactive);
602}
603
604.log-note {
605 margin-top: var(--space-lg);
606}
607
608.pager {
609 display: flex;
610 justify-content: space-between;
611 gap: var(--space-md);
612 margin-top: var(--space-xl);
613}
614
615.pager a,
616.pager span {
617 display: inline-flex;
618 align-items: center;
619 min-height: 44px;
620}
621
622/* ---- Commit --------------------------------------------------------------- */
623
624.commit-head {
625 margin-top: var(--space-lg);
626}
627
628.commit-subject {
629 font-size: var(--heading);
630 font-weight: 400;
631 line-height: 1.25;
632 color: var(--text-display);
633 overflow-wrap: anywhere;
634}
635
636.commit-body {
637 max-width: 72ch;
638 margin-top: var(--space-md);
639 font-family: var(--font-body);
640 font-size: var(--body);
641 white-space: pre-wrap;
642 overflow-wrap: anywhere;
643 color: var(--text-secondary);
644}
645
646.commit-grid {
647 display: grid;
648 gap: var(--space-xl);
649 margin-top: var(--space-xl);
650}
651
652@media (min-width: 768px) {
653 .commit-grid {
654 grid-template-columns: minmax(0, 1fr) auto;
655 align-items: end;
656 }
657}
658
659/* The one break on the commit page: a hero diffstat. */
660.diffstat-hero {
661 text-align: right;
662}
663
664.diffstat-num {
665 font-family: var(--font-mono);
666 font-size: 48px;
667 line-height: 1;
668 letter-spacing: -0.02em;
669 color: var(--text-display);
670 white-space: nowrap;
671}
672
673.diffstat-hero .label {
674 margin-top: var(--space-sm);
675}
676
677.add {
678 color: var(--success);
679}
680
681.del {
682 color: var(--accent);
683}
684
685.commit-actions {
686 display: flex;
687 flex-wrap: wrap;
688 align-items: center;
689 justify-content: space-between;
690 gap: var(--space-md);
691 margin-top: var(--space-xl);
692}
693
694.context-ctl {
695 display: inline-flex;
696 align-items: center;
697 gap: var(--space-sm);
698}
699
700.context-ctl a,
701.context-ctl > span:first-child,
702.context-ctl > span:last-child {
703 display: inline-flex;
704 align-items: center;
705 justify-content: center;
706 min-width: 28px;
707 min-height: 28px;
708}
709
710.file-list {
711 list-style: none;
712 margin-top: var(--space-lg);
713 border-top: 1px solid var(--border);
714}
715
716.file-row {
717 display: flex;
718 align-items: center;
719 gap: var(--space-md);
720 min-height: 40px;
721 padding-block: var(--space-xs);
722 border-bottom: 1px solid var(--border);
723}
724
725.file-status {
726 flex: none;
727 width: 1.5em;
728 font-family: var(--font-mono);
729 font-size: var(--caption);
730 color: var(--text-secondary);
731}
732
733.file-path {
734 flex: 1;
735 min-width: 0;
736 font-family: var(--font-mono);
737 font-size: var(--body-sm);
738 color: var(--text-primary);
739 overflow-wrap: anywhere;
740}
741
742.file-path .dim,
743.diff-path .dim {
744 color: var(--text-disabled);
745}
746
747.file-counts {
748 flex: none;
749 font-family: var(--font-mono);
750 font-size: var(--caption);
751 white-space: nowrap;
752}
753
754.blocks {
755 display: inline-flex;
756 flex: none;
757 gap: 2px;
758}
759
760.blocks i {
761 width: 8px;
762 height: 8px;
763 background: var(--segment-empty);
764}
765
766.blocks i.add {
767 background: var(--success);
768}
769
770.blocks i.del {
771 background: var(--accent);
772}
773
774.diff-file {
775 margin-top: var(--space-2xl);
776}
777
778.diff-head {
779 position: sticky;
780 top: 0;
781 z-index: 1;
782 display: flex;
783 align-items: center;
784 gap: var(--space-md);
785 min-height: 44px;
786 background: var(--black);
787 border-bottom: 1px solid var(--border-visible);
788}
789
790.diff-path {
791 flex: 1;
792 min-width: 0;
793 font-family: var(--font-mono);
794 font-size: var(--body-sm);
795 color: var(--text-display);
796 overflow-wrap: anywhere;
797}
798
799.diff-view {
800 flex: none;
801}
802
803.diff-note {
804 padding-block: var(--space-md);
805 border-bottom: 1px solid var(--border);
806 overflow-wrap: anywhere;
807}
808
809.diff-file .code-wrap {
810 margin-top: 0;
811 border-top: 0;
812}
813
814.code.diff .ln {
815 padding: 0 var(--space-sm);
816 color: var(--text-disabled);
817 font-size: 12px;
818}
819
820.code.diff .ln + .ln {
821 border-left: 0;
822}
823
824.code.diff .sign {
825 width: 1%;
826 padding: 0 var(--space-xs) 0 var(--space-sm);
827 color: var(--text-disabled);
828 user-select: none;
829 -webkit-user-select: none;
830}
831
832.code.diff .lc {
833 padding-left: 0;
834}
835
836.code.diff tr.add .ln:first-child {
837 border-left-color: var(--success);
838}
839
840.code.diff tr.add .sign {
841 color: var(--success);
842}
843
844.code.diff tr.del .ln:first-child {
845 border-left-color: var(--accent);
846}
847
848.code.diff tr.del .sign {
849 color: var(--accent);
850}
851
852.code.diff tr.del .lc {
853 opacity: 0.55;
854}
855
856.code.diff tr.hunk td {
857 padding-block: var(--space-xs);
858 color: var(--text-disabled);
859}
860
861.code.diff tr.hunk .lc {
862 font-family: var(--font-mono);
863 font-size: 12px;
864}
865
866.code.diff tr.hunk:not(:first-child) td {
867 border-top: 1px solid var(--border);
868}
869
870/* ---- Markdown ------------------------------------------------------------ */
871
872.markdown {
873 max-width: 72ch;
874 overflow-wrap: break-word;
875 color: var(--text-primary);
876}
877
878.markdown > * + * {
879 margin-top: var(--space-md);
880}
881
882.markdown h1,
883.markdown h2,
884.markdown h3,
885.markdown h4,
886.markdown h5,
887.markdown h6 {
888 margin-top: var(--space-xl);
889 line-height: 1.25;
890}
891
892.markdown > :first-child {
893 margin-top: 0;
894}
895
896.markdown h1 {
897 font-size: var(--heading);
898}
899
900.markdown h2 {
901 font-size: var(--subheading);
902}
903
904.markdown h3,
905.markdown h4,
906.markdown h5,
907.markdown h6 {
908 font-size: var(--body);
909}
910
911.markdown a.anchor {
912 display: none;
913}
914
915.markdown ul,
916.markdown ol {
917 padding-left: var(--space-lg);
918}
919
920.markdown li + li,
921.markdown li > ul,
922.markdown li > ol {
923 margin-top: var(--space-xs);
924}
925
926.markdown .contains-task-list {
927 list-style: none;
928 padding-left: var(--space-xs);
929}
930
931.markdown input[type="checkbox"] {
932 margin: 0 var(--space-sm) 0 0;
933 vertical-align: middle;
934 accent-color: var(--text-display);
935}
936
937.markdown code {
938 padding: 1px var(--space-xs);
939 border-radius: 4px;
940 background: var(--surface-raised);
941 font-size: 0.875em;
942}
943
944.markdown pre {
945 padding: var(--space-md);
946 border: 1px solid var(--border);
947 border-radius: 8px;
948 background: var(--surface);
949 overflow-x: auto;
950 line-height: 20px;
951 tab-size: 4;
952}
953
954.markdown pre code {
955 padding: 0;
956 background: none;
957 font-size: 13px;
958}
959
960.markdown pre.plain {
961 max-width: none;
962 white-space: pre-wrap;
963}
964
965.markdown blockquote {
966 padding-left: var(--space-md);
967 border-left: 2px solid var(--border-visible);
968 color: var(--text-secondary);
969}
970
971.markdown hr {
972 border: 0;
973 border-top: 1px solid var(--border);
974}
975
976.markdown img {
977 display: inline-block;
978}
979
980.markdown table {
981 display: block;
982 max-width: 100%;
983 overflow-x: auto;
984 border-collapse: collapse;
985}
986
987.markdown th,
988.markdown td {
989 padding: var(--space-sm) var(--space-md) var(--space-sm) 0;
990 border-bottom: 1px solid var(--border);
991}
992
993.markdown th {
994 border-bottom-color: var(--border-visible);
995 font-weight: 500;
996 text-align: left;
997}
998
999.markdown .markdown-alert {
1000 padding-left: var(--space-md);
1001 border-left: 2px solid var(--border-visible);
1002}
1003
1004.markdown .markdown-alert-warning,
1005.markdown .markdown-alert-caution {
1006 border-left-color: var(--accent);
1007}
1008
1009.markdown .markdown-alert-title {
1010 font-family: var(--font-mono);
1011 font-size: var(--label);
1012 letter-spacing: 0.08em;
1013 text-transform: uppercase;
1014 color: var(--text-secondary);
1015}
1016
1017.markdown .footnotes {
1018 font-size: var(--body-sm);
1019 color: var(--text-secondary);
1020 border-top: 1px solid var(--border);
1021 padding-top: var(--space-md);
1022}