Knot server viewer.
knotview.srv.rbrt.fr
knot
tangled
1* {
2 margin: 0;
3 padding: 0;
4 box-sizing: border-box;
5}
6
7body {
8 font-family:
9 -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu,
10 Cantarell, sans-serif;
11 background: #f1f5f9;
12 color: #1e293b;
13 font-size: 14px;
14 line-height: 1.5;
15}
16
17.container {
18 max-width: 1400px;
19 margin: 0 auto;
20 padding: 20px;
21}
22
23header {
24 background: white;
25 padding: 24px;
26 border-radius: 8px;
27 box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
28 margin-bottom: 20px;
29 border: 1px solid #e2e8f0;
30}
31
32h1 {
33 font-size: 24px;
34 margin-bottom: 20px;
35 color: #0f172a;
36 font-weight: 600;
37}
38
39.connection-panel {
40 display: flex;
41 gap: 12px;
42 margin-bottom: 12px;
43 flex-wrap: wrap;
44}
45
46.connection-panel input {
47 flex: 1;
48 min-width: 300px;
49 padding: 10px 14px;
50 border: 1px solid #cbd5e1;
51 border-radius: 6px;
52 font-size: 14px;
53 background: white;
54 transition: all 0.15s;
55}
56
57.connection-panel input:focus {
58 outline: none;
59 border-color: #3b82f6;
60 box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);
61}
62
63button {
64 padding: 10px 20px;
65 background: #3b82f6;
66 color: white;
67 border: none;
68 border-radius: 6px;
69 cursor: pointer;
70 font-size: 14px;
71 font-weight: 500;
72 transition: all 0.15s;
73 box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
74}
75
76button:hover {
77 background: #2563eb;
78}
79
80button:active {
81 transform: translateY(1px);
82}
83
84button:disabled {
85 background: #94a3b8;
86 cursor: not-allowed;
87 transform: none;
88}
89
90button.secondary {
91 background: white;
92 color: #475569;
93 border: 1px solid #cbd5e1;
94}
95
96button.secondary:hover {
97 background: #f8fafc;
98}
99
100.status {
101 padding: 10px 14px;
102 border-radius: 6px;
103 font-size: 13px;
104 display: none;
105 border: 1px solid transparent;
106}
107
108.status.success {
109 background: #dcfce7;
110 color: #166534;
111 border-color: #bbf7d0;
112}
113
114.status.error {
115 background: #fee2e2;
116 color: #991b1b;
117 border-color: #fecaca;
118}
119
120.main-content {
121 display: flex;
122 gap: 20px;
123 align-items: flex-start;
124}
125
126.sidebar {
127 width: 300px;
128 background: white;
129 border-radius: 8px;
130 border: 1px solid #e2e8f0;
131 box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
132 flex-shrink: 0;
133}
134
135.sidebar h2 {
136 font-size: 16px;
137 font-weight: 600;
138 padding: 16px 20px;
139 border-bottom: 1px solid #e2e8f0;
140 color: #0f172a;
141 display: flex;
142 align-items: center;
143 justify-content: space-between;
144}
145
146.repo-info {
147 padding: 20px;
148 background: white;
149 border-radius: 8px;
150 border: 1px solid #e2e8f0;
151 box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
152 margin-bottom: 20px;
153}
154
155.repo-info h3 {
156 font-size: 14px;
157 font-weight: 600;
158 margin-bottom: 12px;
159 color: #64748b;
160}
161
162.repo-info .label {
163 font-size: 12px;
164 color: #64748b;
165 margin-bottom: 4px;
166 font-weight: 500;
167 text-transform: uppercase;
168 letter-spacing: 0.5px;
169}
170
171.repo-info .value {
172 font-size: 13px;
173 color: #1e293b;
174 margin-bottom: 12px;
175 font-family: monospace;
176}
177
178.clone-url {
179 display: flex;
180 align-items: center;
181 gap: 8px;
182 background: #f8fafc;
183 padding: 8px 12px;
184 border-radius: 6px;
185 border: 1px solid #e2e8f0;
186 margin-bottom: 12px;
187}
188
189.clone-url code {
190 flex: 1;
191 font-size: 12px;
192 color: #475569;
193 overflow: hidden;
194 text-overflow: ellipsis;
195}
196
197.copy-btn {
198 padding: 4px 8px;
199 font-size: 11px;
200 min-width: 50px;
201}
202
203.copy-btn:hover {
204 background: #2563eb;
205}
206
207.branches-section {
208 border-top: 1px solid #e2e8f0;
209}
210
211.branch-list {
212 max-height: 300px;
213 overflow-y: auto;
214}
215
216.branch-item {
217 padding: 10px 20px;
218 cursor: pointer;
219 transition: background 0.15s;
220 border-bottom: 1px solid #f1f5f9;
221 font-size: 13px;
222 color: #475569;
223 display: flex;
224 align-items: center;
225 gap: 8px;
226}
227
228.branch-item:hover {
229 background: #f8fafc;
230}
231
232.branch-item.active {
233 background: #eff6ff;
234 color: #1e40af;
235 font-weight: 500;
236}
237
238.viewer {
239 flex: 1;
240 background: white;
241 border-radius: 8px;
242 border: 1px solid #e2e8f0;
243 box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
244 overflow: hidden;
245}
246
247.breadcrumb {
248 padding: 16px 20px;
249 border-bottom: 1px solid #e2e8f0;
250 font-size: 13px;
251 color: #64748b;
252 background: #f8fafc;
253 display: flex;
254 align-items: center;
255 flex-wrap: wrap;
256}
257
258.breadcrumb a {
259 color: #3b82f6;
260 text-decoration: none;
261 transition: color 0.15s;
262 cursor: pointer;
263}
264
265.breadcrumb a:hover {
266 color: #2563eb;
267 text-decoration: underline;
268}
269
270.breadcrumb span {
271 margin: 0 8px;
272}
273
274.breadcrumb .current {
275 color: #1e293b;
276 font-weight: 500;
277}
278
279.file-list {
280 padding: 0;
281 list-style: none;
282 margin: 0;
283}
284
285.file-item {
286 padding: 12px 20px;
287 display: flex;
288 align-items: center;
289 gap: 12px;
290 border-bottom: 1px solid #f1f5f9;
291 cursor: pointer !important;
292}
293
294.file-item:last-child {
295 border-bottom: none;
296}
297
298.file-item:hover {
299 background: #f8fafc;
300}
301
302.file-icon {
303 width: 20px;
304 height: 20px;
305 flex-shrink: 0;
306 color: #64748b;
307 cursor: pointer;
308}
309
310.file-name {
311 flex: 1;
312 color: #1e293b;
313 font-size: 14px;
314 cursor: pointer;
315}
316
317.file-size {
318 color: #64748b;
319 font-size: 12px;
320 cursor: pointer;
321}
322
323.file-content {
324 padding: 0;
325 overflow-x: auto;
326 background: #0d1117;
327 font-family: "Monaco", "Menlo", "Ubuntu Mono", monospace;
328 font-size: 13px;
329}
330
331.file-content pre {
332 margin: 0;
333 white-space: pre;
334 background: transparent;
335 padding: 20px;
336}
337
338.file-content code {
339 background: transparent;
340}
341
342.file-content code.hljs {
343 padding: 0;
344 background: transparent;
345}
346
347.line-numbers {
348 display: flex;
349 gap: 0;
350 background: #0d1117;
351}
352
353.line-numbers .numbers {
354 color: #6e7681;
355 text-align: right;
356 user-select: none;
357 min-width: 50px;
358 padding: 20px 16px 20px 20px;
359 border-right: 1px solid #30363d;
360 background: #0d1117;
361 line-height: 1.5;
362}
363
364.line-numbers pre:not(.numbers) {
365 flex: 1;
366 padding-left: 20px;
367}
368
369.loading {
370 padding: 40px;
371 text-align: center;
372 color: #64748b;
373}
374
375.spinner {
376 width: 40px;
377 height: 40px;
378 margin: 0 auto 16px;
379 border: 3px solid #e2e8f0;
380 border-top-color: #3b82f6;
381 border-radius: 50%;
382 animation: spin 0.8s linear infinite;
383}
384
385@keyframes spin {
386 to {
387 transform: rotate(360deg);
388 }
389}
390
391.empty-state {
392 padding: 60px 40px;
393 text-align: center;
394}
395
396.empty-state svg {
397 width: 64px;
398 height: 64px;
399 margin: 0 auto 20px;
400 color: #cbd5e1;
401 display: block;
402}
403
404.empty-state h3 {
405 font-size: 18px;
406 color: #475569;
407 margin-bottom: 8px;
408}
409
410.empty-state p {
411 color: #64748b;
412 font-size: 14px;
413}
414
415.error-message {
416 padding: 40px;
417 text-align: center;
418 color: #991b1b;
419 background: #fee2e2;
420 margin: 20px;
421 border-radius: 8px;
422 border: 1px solid #fecaca;
423}
424
425.file-header {
426 padding: 16px 20px;
427 border-bottom: 1px solid #e2e8f0;
428 background: #f8fafc;
429 display: flex;
430 justify-content: space-between;
431 align-items: center;
432}
433
434.file-header h3 {
435 font-size: 15px;
436 color: #1e293b;
437 font-weight: 600;
438}
439
440.file-actions {
441 display: flex;
442 gap: 8px;
443}
444
445.file-actions button {
446 padding: 6px 12px;
447 font-size: 12px;
448}
449
450.user-item {
451 margin-bottom: 24px;
452}
453
454.user-header {
455 font-size: 16px;
456 font-weight: 600;
457 color: #0f172a;
458 margin-bottom: 12px;
459 padding: 12px;
460 background: #f8fafc;
461 border-radius: 6px;
462}
463
464.repo-item {
465 padding: 12px;
466 margin-bottom: 8px;
467 background: white;
468 border: 1px solid #e2e8f0;
469 border-radius: 6px;
470 cursor: pointer;
471 transition: all 0.15s;
472}
473
474.repo-item:hover {
475 border-color: #3b82f6;
476 box-shadow: 0 2px 4px rgba(59, 130, 246, 0.1);
477}
478
479.repo-item strong {
480 display: block;
481 font-size: 14px;
482 color: #1e293b;
483 margin-bottom: 4px;
484}
485
486.repo-item small {
487 font-size: 12px;
488 color: #64748b;
489 font-family: monospace;
490}
491
492.markdown-content {
493 padding: 20px 40px;
494 background: white;
495 font-family:
496 -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu,
497 Cantarell, sans-serif;
498 font-size: 15px;
499 line-height: 1.6;
500 color: #1e293b;
501}
502
503.markdown-content h1,
504.markdown-content h2,
505.markdown-content h3,
506.markdown-content h4,
507.markdown-content h5,
508.markdown-content h6 {
509 margin-top: 24px;
510 margin-bottom: 16px;
511 font-weight: 600;
512 line-height: 1.25;
513 color: #0f172a;
514}
515
516.markdown-content h1 {
517 font-size: 2em;
518 padding-bottom: 0.3em;
519 border-bottom: 1px solid #e2e8f0;
520}
521
522.markdown-content h2 {
523 font-size: 1.5em;
524 padding-bottom: 0.3em;
525 border-bottom: 1px solid #e2e8f0;
526}
527
528.markdown-content h3 {
529 font-size: 1.25em;
530}
531
532.markdown-content h4 {
533 font-size: 1em;
534}
535
536.markdown-content h5 {
537 font-size: 0.875em;
538}
539
540.markdown-content h6 {
541 font-size: 0.85em;
542 color: #64748b;
543}
544
545.markdown-content p {
546 margin-top: 0;
547 margin-bottom: 16px;
548}
549
550.markdown-content ul,
551.markdown-content ol {
552 margin-top: 0;
553 margin-bottom: 16px;
554 padding-left: 2em;
555}
556
557.markdown-content li + li {
558 margin-top: 0.25em;
559}
560
561.markdown-content code {
562 padding: 0.2em 0.4em;
563 margin: 0;
564 font-size: 85%;
565 background: #f1f5f9;
566 border-radius: 6px;
567 font-family: "Monaco", "Menlo", "Ubuntu Mono", monospace;
568 color: #e11d48;
569}
570
571.markdown-content pre {
572 padding: 16px;
573 overflow: auto;
574 font-size: 85%;
575 line-height: 1.45;
576 background: #0d1117;
577 border-radius: 6px;
578 margin-bottom: 16px;
579}
580
581.markdown-content pre code {
582 display: block;
583 padding: 0;
584 margin: 0;
585 overflow: visible;
586 line-height: inherit;
587 word-wrap: normal;
588 background: transparent;
589 border: 0;
590 color: #c9d1d9;
591}
592
593.markdown-content pre code.hljs {
594 background: transparent;
595}
596
597.markdown-content blockquote {
598 padding: 0 1em;
599 color: #64748b;
600 border-left: 0.25em solid #cbd5e1;
601 margin: 0 0 16px 0;
602}
603
604.markdown-content blockquote > :first-child {
605 margin-top: 0;
606}
607
608.markdown-content blockquote > :last-child {
609 margin-bottom: 0;
610}
611
612.markdown-content table {
613 border-spacing: 0;
614 border-collapse: collapse;
615 margin-bottom: 16px;
616 width: 100%;
617 overflow: auto;
618}
619
620.markdown-content table th,
621.markdown-content table td {
622 padding: 6px 13px;
623 border: 1px solid #e2e8f0;
624}
625
626.markdown-content table th {
627 font-weight: 600;
628 background: #f8fafc;
629}
630
631.markdown-content table tr {
632 background: white;
633 border-top: 1px solid #e2e8f0;
634}
635
636.markdown-content table tr:nth-child(2n) {
637 background: #f8fafc;
638}
639
640.markdown-content img {
641 max-width: 100%;
642 box-sizing: border-box;
643 border-radius: 6px;
644}
645
646.markdown-content a {
647 color: #3b82f6;
648 text-decoration: none;
649}
650
651.markdown-content a:hover {
652 text-decoration: underline;
653}
654
655.markdown-content hr {
656 height: 0.25em;
657 padding: 0;
658 margin: 24px 0;
659 background-color: #e2e8f0;
660 border: 0;
661}
662
663@media (max-width: 768px) {
664 .main-content {
665 flex-direction: column;
666 }
667
668 .connection-panel {
669 flex-direction: column;
670 }
671
672 .connection-panel input {
673 min-width: 100%;
674 }
675
676 .markdown-content {
677 padding: 20px;
678 }
679}