Krolyxon
Commit 55c1225

ferreniumassetscssrepo.css

709 lines · 12.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/* ---- Markdown ------------------------------------------------------------ */
558
559.markdown {
560 max-width: 72ch;
561 overflow-wrap: break-word;
562 color: var(--text-primary);
563}
564
565.markdown > * + * {
566 margin-top: var(--space-md);
567}
568
569.markdown h1,
570.markdown h2,
571.markdown h3,
572.markdown h4,
573.markdown h5,
574.markdown h6 {
575 margin-top: var(--space-xl);
576 line-height: 1.25;
577}
578
579.markdown > :first-child {
580 margin-top: 0;
581}
582
583.markdown h1 {
584 font-size: var(--heading);
585}
586
587.markdown h2 {
588 font-size: var(--subheading);
589}
590
591.markdown h3,
592.markdown h4,
593.markdown h5,
594.markdown h6 {
595 font-size: var(--body);
596}
597
598.markdown a.anchor {
599 display: none;
600}
601
602.markdown ul,
603.markdown ol {
604 padding-left: var(--space-lg);
605}
606
607.markdown li + li,
608.markdown li > ul,
609.markdown li > ol {
610 margin-top: var(--space-xs);
611}
612
613.markdown .contains-task-list {
614 list-style: none;
615 padding-left: var(--space-xs);
616}
617
618.markdown input[type="checkbox"] {
619 margin: 0 var(--space-sm) 0 0;
620 vertical-align: middle;
621 accent-color: var(--text-display);
622}
623
624.markdown code {
625 padding: 1px var(--space-xs);
626 border-radius: 4px;
627 background: var(--surface-raised);
628 font-size: 0.875em;
629}
630
631.markdown pre {
632 padding: var(--space-md);
633 border: 1px solid var(--border);
634 border-radius: 8px;
635 background: var(--surface);
636 overflow-x: auto;
637 line-height: 20px;
638 tab-size: 4;
639}
640
641.markdown pre code {
642 padding: 0;
643 background: none;
644 font-size: 13px;
645}
646
647.markdown pre.plain {
648 max-width: none;
649 white-space: pre-wrap;
650}
651
652.markdown blockquote {
653 padding-left: var(--space-md);
654 border-left: 2px solid var(--border-visible);
655 color: var(--text-secondary);
656}
657
658.markdown hr {
659 border: 0;
660 border-top: 1px solid var(--border);
661}
662
663.markdown img {
664 display: inline-block;
665}
666
667.markdown table {
668 display: block;
669 max-width: 100%;
670 overflow-x: auto;
671 border-collapse: collapse;
672}
673
674.markdown th,
675.markdown td {
676 padding: var(--space-sm) var(--space-md) var(--space-sm) 0;
677 border-bottom: 1px solid var(--border);
678}
679
680.markdown th {
681 border-bottom-color: var(--border-visible);
682 font-weight: 500;
683 text-align: left;
684}
685
686.markdown .markdown-alert {
687 padding-left: var(--space-md);
688 border-left: 2px solid var(--border-visible);
689}
690
691.markdown .markdown-alert-warning,
692.markdown .markdown-alert-caution {
693 border-left-color: var(--accent);
694}
695
696.markdown .markdown-alert-title {
697 font-family: var(--font-mono);
698 font-size: var(--label);
699 letter-spacing: 0.08em;
700 text-transform: uppercase;
701 color: var(--text-secondary);
702}
703
704.markdown .footnotes {
705 font-size: var(--body-sm);
706 color: var(--text-secondary);
707 border-top: 1px solid var(--border);
708 padding-top: var(--space-md);
709}