apps/kepler/static/styles.css 14.1 K raw
1
/* Adapted from darkmatter: colors, font, reset. No global table rules. */
2
3
@font-face {
4
    font-family: "Commit Mono";
5
    src: url("/assets/fonts/CommitMono-400-Regular.otf") format("opentype");
6
    font-weight: 400;
7
    font-style: normal;
8
    font-display: block;
9
}
10
@font-face {
11
    font-family: "Commit Mono";
12
    src: url("/assets/fonts/CommitMono-700-Regular.otf") format("opentype");
13
    font-weight: 700;
14
    font-style: normal;
15
    font-display: block;
16
}
17
18
:root {
19
    --bg: #121113;
20
    --bg-alt: #1e1c1f;
21
    --fg: #ffffff;
22
    --fg-dim: #888;
23
    --border: #333;
24
    --link: #ffffff;
25
    --add-fg: #FFC98F;
26
    --del-fg: #538888;
27
    --mono: "Commit Mono", ui-monospace, SFMono-Regular, Menlo, monospace;
28
29
    /* Type scale. Keep it small; --fs-base covers most UI and all code. */
30
    --fs-xs: 11px;
31
    --fs-sm: 12px;
32
    --fs-base: 13px;
33
    --fs-md: 14px;
34
    --fs-lg: 15px;
35
    --fs-xl: 16px;
36
}
37
38
*, *::before, *::after {
39
    margin: 0;
40
    padding: 0;
41
    box-sizing: border-box;
42
    font-family: var(--mono);
43
    -webkit-tap-highlight-color: transparent;
44
}
45
* { scrollbar-width: none; -ms-overflow-style: none; }
46
47
html {
48
    background: var(--bg);
49
    color: var(--fg);
50
    font-size: var(--fs-md);
51
    line-height: 1.6;
52
    /* Stop iOS Safari / mobile WebKit from inflating text in wide blocks
53
       (code tables, diffs). Must stay on html, not body. */
54
    -webkit-text-size-adjust: 100%;
55
    -moz-text-size-adjust: 100%;
56
    text-size-adjust: 100%;
57
}
58
html::-webkit-scrollbar { display: none; }
59
60
body { min-height: 100vh; padding: 0; }
61
62
a { color: var(--link); text-decoration: none; touch-action: manipulation; }
63
a:hover { opacity: 0.7; }
64
65
.container { max-width: 1400px; margin: 0 auto; padding: 0 1.5rem 4rem; }
66
67
.dim { color: var(--fg-dim); }
68
.empty { color: var(--fg-dim); font-style: italic; padding: 0.5rem 0; }
69
70
/* --- Top nav --- */
71
72
.repo-nav {
73
    border-bottom: 1px solid var(--border);
74
    margin: 1rem 0;
75
    padding: 0.25rem 0 0;
76
    display: flex;
77
    align-items: flex-end;
78
    gap: 0.5rem;
79
}
80
.repo-name {
81
    display: flex;
82
    align-items: baseline;
83
    gap: 0.75rem;
84
    font-weight: 700;
85
    font-size: var(--fs-xl);
86
    margin-bottom: -1px;
87
    padding: 0.5rem 0;
88
}
89
.repo-name a { color: var(--fg); }
90
.repo-name .sep { color: var(--fg-dim); font-weight: 400; }
91
92
.tab {
93
    display: inline-block;
94
    padding: 0.5rem 0.75rem;
95
    color: var(--fg-dim);
96
    border: 1px solid transparent;
97
    border-bottom: none;
98
    margin-bottom: -1px;
99
    font-size: var(--fs-base);
100
}
101
.tab:hover { color: var(--fg); opacity: 1; }
102
.tab.active {
103
    color: var(--fg);
104
    border-color: var(--border);
105
    background: var(--bg);
106
}
107
.repo-nav .tab:first-of-type { margin-left: auto; }
108
109
main { display: block; }
110
111
.footer {
112
    text-align: center;
113
    border-top: 1px solid var(--border);
114
    margin-top: 3rem;
115
    padding: 1rem 0;
116
    color: var(--fg-dim);
117
    font-size: var(--fs-base);
118
}
119
.footer a { color: var(--fg-dim); text-decoration: underline; }
120
.footer a:hover { color: var(--fg); }
121
122
h1 { font-weight: 700; font-size: var(--fs-xl); margin-bottom: 0.75rem; }
123
h2 { font-weight: 700; font-size: var(--fs-lg); margin-bottom: 0.5rem; }
124
h3 { font-weight: 700; font-size: var(--fs-md); margin: 1.25rem 0 0.5rem; }
125
h3:first-child { margin-top: 0; }
126
127
/* --- Generic list tables (repo/log/ref) --- */
128
129
.repo-list, .log-list, .ref-list {
130
    width: 100%;
131
    border-collapse: collapse;
132
    margin-bottom: 1rem;
133
    font-size: var(--fs-base);
134
}
135
.repo-list th, .log-list th, .ref-list th {
136
    text-align: left;
137
    padding: 0.4rem 0.5rem;
138
    color: var(--fg-dim);
139
    font-weight: 400;
140
    font-size: var(--fs-sm);
141
    text-transform: uppercase;
142
    border-bottom: 1px solid var(--border);
143
}
144
.repo-list td, .log-list td, .ref-list td {
145
    padding: 0.35rem 0.5rem;
146
    vertical-align: top;
147
}
148
.repo-list tbody tr:hover,
149
.log-list tbody tr:hover,
150
.ref-list tbody tr:hover { background: var(--bg-alt); }
151
152
.hash { white-space: nowrap; }
153
.hash a { color: var(--fg-dim); }
154
.hash a:hover { color: var(--fg); opacity: 1; }
155
.date { white-space: nowrap; color: var(--fg-dim); }
156
.author { color: var(--fg-dim); white-space: nowrap; }
157
.ref-name { overflow-wrap: anywhere; word-break: break-word; }
158
.subject { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
159
.size { color: var(--fg-dim); text-align: right; white-space: nowrap; font-size: var(--fs-sm); }
160
161
/* --- Breadcrumbs --- */
162
163
.breadcrumbs { font-size: var(--fs-base); margin-bottom: 1rem; color: var(--fg-dim); }
164
.breadcrumbs a { color: var(--fg); }
165
166
/* --- Repo head (last commit + clone) --- */
167
168
.repo-head {
169
    display: flex;
170
    align-items: stretch;
171
    gap: 1rem;
172
    margin-bottom: 1rem;
173
}
174
175
.last-commit {
176
    display: flex;
177
    align-items: center;
178
    gap: 0.75rem;
179
    border: 1px solid var(--border);
180
    padding: 0.4rem 0.75rem;
181
    font-size: var(--fs-base);
182
    overflow: hidden;
183
    flex: 1;
184
    min-width: 0;
185
}
186
.last-commit .subject { flex: 1; }
187
188
.clone-dropdown { position: relative; }
189
.clone-toggle {
190
    height: 100%;
191
    background: var(--bg-alt);
192
    border: 1px solid var(--border);
193
    color: var(--fg);
194
    padding: 0.4rem 0.9rem;
195
    font: inherit;
196
    font-size: var(--fs-base);
197
    cursor: pointer;
198
    white-space: nowrap;
199
}
200
.clone-toggle::after { content: " \25be"; }
201
.clone-toggle:hover { background: var(--border); }
202
203
.clone-menu {
204
    position: absolute;
205
    top: calc(100% + 4px);
206
    right: 0;
207
    z-index: 10;
208
    min-width: 18rem;
209
    background: var(--bg);
210
    border: 1px solid var(--border);
211
    padding: 0.5rem;
212
    display: flex;
213
    flex-direction: column;
214
    gap: 0.5rem;
215
}
216
.clone-menu[hidden] { display: none; }
217
.clone-option { display: flex; flex-direction: column; gap: 0.25rem; }
218
.clone-label { font-size: var(--fs-xs); color: var(--fg-dim); text-transform: uppercase; }
219
.clone-option .copy-btn { align-self: flex-end; }
220
.clone-url {
221
    display: block;
222
    color: var(--fg);
223
    font-family: var(--mono);
224
    font-size: var(--fs-sm);
225
    background: var(--bg-alt);
226
    border: 1px solid var(--border);
227
    padding: 0.25rem 0.4rem;
228
    white-space: nowrap;
229
    overflow: auto hidden;
230
}
231
232
/* --- Repo home grid --- */
233
234
.repo-home { display: grid; grid-template-columns: 280px 1fr; gap: 1.5rem; align-items: start; }
235
236
.content-view { min-width: 0; }
237
238
/* --- File tree --- */
239
240
.file-tree { font-size: var(--fs-base); }
241
.tree-entry {
242
    display: flex;
243
    align-items: baseline;
244
    padding: 0.25rem 0.5rem;
245
}
246
.tree-entry:hover { opacity: 1; background: var(--bg-alt); }
247
.file-tree .name { white-space: nowrap; flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; }
248
.file-tree .size { white-space: nowrap; margin-left: 0.5rem; }
249
250
/* --- Tree page directory listing --- */
251
252
.tree-list { width: 100%; border-collapse: collapse; font-size: var(--fs-base); }
253
.tree-list td { padding: 0.3rem 0.5rem; vertical-align: top; }
254
.tree-list tr:hover { background: var(--bg-alt); }
255
256
/* --- File / blob view --- */
257
258
.file-view { border: 1px solid var(--border); }
259
.file-header {
260
    display: flex;
261
    gap: 0.75rem;
262
    align-items: baseline;
263
    padding: 0.5rem 0.75rem;
264
    border-bottom: 1px solid var(--border);
265
    font-size: var(--fs-base);
266
}
267
.file-name { font-weight: 700; flex: 1; }
268
.file-meta { color: var(--fg-dim); font-size: var(--fs-sm); }
269
.copy-btn {
270
    background: none;
271
    border: 0;
272
    padding: 0;
273
    margin: 0;
274
    font: inherit;
275
    color: var(--link);
276
    cursor: pointer;
277
}
278
279
.blob-view { overflow: auto hidden; }
280
.blob-code { margin: 0; border-collapse: collapse; border-spacing: 0; width: 100%; }
281
.blob-code td { padding: 0; vertical-align: top; line-height: 0; border: 0; }
282
.blob-code tr:first-child td { padding-top: 0.5rem; }
283
.blob-code tr:last-child td { padding-bottom: 0.75rem; }
284
.blob-code pre {
285
    margin: 0;
286
    font-family: var(--mono);
287
    font-size: var(--fs-base);
288
    line-height: 1.5;
289
    white-space: pre;
290
    display: inline;
291
}
292
.blob-code .line-num {
293
    width: 1%;
294
    min-width: 4rem;
295
    padding: 0 0.75rem 0 0.5rem;
296
    text-align: right;
297
    user-select: none;
298
    vertical-align: top;
299
}
300
.line-num a {
301
    color: var(--fg-dim);
302
    opacity: 0.5;
303
    font-size: var(--fs-base);
304
    line-height: 1.5;
305
    display: inline-block;
306
}
307
.line-num a:hover { opacity: 1; }
308
.blob-code .line-code { width: 100%; padding-left: 1.5rem; }
309
tr:target .line-num,
310
tr:target .line-code { background: var(--bg-alt); }
311
312
/* --- Commit view --- */
313
314
.commit-info { margin-bottom: 1.5rem; }
315
.commit-title { display: flex; align-items: baseline; gap: 1rem; margin-bottom: 0.75rem; }
316
.commit-title .subject { font-weight: 700; font-size: var(--fs-xl); flex: 1; white-space: normal; overflow: visible; }
317
.commit-hash { color: var(--fg-dim); white-space: nowrap; font-size: var(--fs-base); }
318
.commit-info .body {
319
    background: var(--bg-alt);
320
    padding: 0.5rem 0.75rem;
321
    font-size: var(--fs-base);
322
    margin: 0 0 1rem 0;
323
    white-space: pre-wrap;
324
}
325
.commit-subtitle {
326
    display: flex;
327
    align-items: baseline;
328
    gap: 1rem;
329
    font-size: var(--fs-base);
330
    color: var(--fg-dim);
331
    padding-top: 0.5rem;
332
    border-top: 1px solid var(--border);
333
}
334
.commit-meta { flex: 1; }
335
.commit-stats { white-space: nowrap; }
336
337
.add { color: var(--add-fg); }
338
.del { color: var(--del-fg); }
339
340
/* --- Diff --- */
341
342
.diff-file { border: 1px solid var(--border); margin-bottom: 1rem; overflow-x: auto; }
343
.diff-header {
344
    display: flex;
345
    align-items: center;
346
    gap: 0.5rem;
347
    border-bottom: 1px solid var(--border);
348
    padding: 0.5rem 0.75rem;
349
    font-size: var(--fs-base);
350
    background: var(--bg-alt);
351
}
352
.diff-header .name { flex: 1; }
353
.diff-header-stats { margin-left: auto; white-space: nowrap; color: var(--fg-dim); }
354
355
.diff-hunk { margin: 0; border: none; width: 100%; border-collapse: collapse; }
356
.diff-hunk td { border: none; padding: 0; vertical-align: top; }
357
.diff-hunk tr:first-child td { padding-top: 0.5rem; }
358
.diff-hunk tr:last-child td { padding-bottom: 0.5rem; }
359
.diff-hunk pre {
360
    margin: 0;
361
    font-family: var(--mono);
362
    font-size: var(--fs-base);
363
    line-height: 1.5;
364
    white-space: pre;
365
    padding: 0 0.75rem;
366
}
367
.diff-hunk td.diff-num {
368
    width: 1%;
369
    min-width: 2.5rem;
370
    padding: 0 0.25rem 0 0.5rem;
371
    text-align: right;
372
    color: var(--fg-dim);
373
    opacity: 0.6;
374
    user-select: none;
375
    font-size: var(--fs-base);
376
    line-height: 1.5;
377
    white-space: nowrap;
378
}
379
.diff-add .diff-num { color: var(--add-fg); opacity: 0.7; }
380
.diff-del .diff-num { color: var(--del-fg); opacity: 0.7; }
381
382
td.diff-marker {
383
    width: 1%;
384
    padding: 0 0.25rem 0 0.75rem;
385
    font-size: var(--fs-base);
386
    line-height: 1.5;
387
    user-select: none;
388
    white-space: pre;
389
}
390
.diff-add .diff-marker { color: var(--add-fg); opacity: 0.8; }
391
.diff-del .diff-marker { color: var(--del-fg); opacity: 0.8; }
392
.diff-context .diff-marker { color: transparent; }
393
.diff-add pre { color: var(--add-fg); }
394
.diff-del pre { color: var(--del-fg); }
395
.diff-sep { margin: 0.25rem 0; border-top: 1px dashed var(--border); }
396
.diff-sep-row td { padding: 0; }
397
398
/* --- Pagination --- */
399
400
.pagination { display: flex; justify-content: center; padding: 0.75rem 0; font-size: var(--fs-base); gap: 0; }
401
.pagination a {
402
    padding: 0.4rem 0.75rem;
403
    border: 1px solid var(--border);
404
    color: var(--fg-dim);
405
}
406
.pagination a + a { border-left: none; }
407
.pagination a:hover { color: var(--fg); opacity: 1; }
408
409
/* --- Readme --- */
410
411
.readme { font-size: var(--fs-md); line-height: 1.6; max-width: 900px; min-width: 0; overflow-wrap: break-word; }
412
.readme img, .readme video, .readme svg { max-width: 100%; height: auto; }
413
.readme h1, .readme h2, .readme h3, .readme h4 { margin-top: 1.25rem; }
414
.readme pre {
415
    background: var(--bg-alt);
416
    padding: 0.75rem;
417
    margin: 0.75rem 0;
418
    overflow-x: auto;
419
    font-size: var(--fs-base);
420
}
421
.readme p { margin: 0.5rem 0; }
422
.readme code { background: var(--bg-alt); padding: 1px 4px; font-size: var(--fs-base); }
423
.readme pre code { background: transparent; padding: 0; }
424
.readme blockquote { border-left: 2px solid var(--border); margin: 0.75rem 0; padding-left: 0.75rem; color: var(--fg-dim); }
425
.readme table { border-collapse: collapse; margin: 0.75rem 0; }
426
.readme th, .readme td { border: 1px solid var(--border); padding: 0.25rem 0.5rem; }
427
.readme a { color: var(--fg); text-decoration: underline; }
428
.readme ul, .readme ol { padding-left: 1.5rem; margin: 0.5rem 0; }
429
.readme li { margin: 0.25rem 0; }
430
.readme li > ul, .readme li > ol { margin: 0.25rem 0; }
431
432
/* --- Error page --- */
433
434
.error-page { text-align: center; padding: 4rem 1rem; }
435
436
/* --- Mobile ---
437
   Single block, kept last so equal-specificity overrides beat the
438
   desktop rules above. */
439
440
@media (max-width: 720px) {
441
    .desktop { display: none; }
442
443
    .container { padding: 0 0.75rem 3rem; }
444
445
    h1 { font-size: var(--fs-lg); }
446
447
    .repo-list, .log-list, .ref-list { font-size: var(--fs-sm); }
448
    .repo-list td, .log-list td, .ref-list td,
449
    .repo-list th, .log-list th, .ref-list th { padding: 0.4rem 0.3rem; }
450
    .log-list .subject, .repo-list .subject { white-space: normal; }
451
452
    .repo-nav { flex-wrap: wrap; gap: 0.25rem; }
453
    .repo-name { flex: 1 1 100%; font-size: var(--fs-lg); padding: 0.25rem 0; gap: 0.5rem; }
454
    .repo-nav .tab:first-of-type { margin-left: 0; }
455
    .tab { padding: 0.4rem 0.6rem; }
456
457
    .repo-home { grid-template-columns: 1fr; }
458
459
    .repo-head { flex-direction: column; gap: 0.75rem; align-items: stretch; }
460
    .clone-toggle { width: 100%; }
461
    .clone-menu { left: 0; right: 0; min-width: 0; }
462
    .last-commit { flex-wrap: wrap; gap: 0.25rem 0.75rem; padding: 0.5rem 0.75rem; }
463
    .last-commit .subject {
464
        flex: 1 1 100%;
465
        min-width: 0;
466
        white-space: nowrap;
467
        overflow: hidden;
468
        text-overflow: ellipsis;
469
    }
470
471
    .commit-title { flex-wrap: wrap; gap: 0.25rem 0.75rem; }
472
    .commit-title .subject { flex: 1 1 100%; font-size: var(--fs-lg); }
473
    .commit-subtitle { flex-direction: column; align-items: flex-start; gap: 0.25rem; }
474
475
    .file-header { flex-wrap: wrap; gap: 0.25rem 0.75rem; }
476
477
    .diff-header { flex-wrap: wrap; gap: 0.25rem 0.5rem; }
478
    .diff-header .name { word-break: break-all; }
479
480
    .blob-code .line-num { min-width: 2.5rem; padding: 0 0.4rem 0 0.25rem; }
481
    .blob-code .line-code { padding-left: 0.75rem; }
482
    .diff-hunk td.diff-num { min-width: 1.75rem; padding: 0 0.2rem 0 0.25rem; }
483
    td.diff-marker { padding: 0 0.2rem 0 0.4rem; }
484
}