tonybtw

https://git.tonybtw.com/tonybtw.git git://git.tonybtw.com/tonybtw.git
20,804 bytes raw
1
@font-face {
2
  font-family: 'Iosevka Web';
3
  src: url('/fonts/iosevka-Regular.woff2') format('woff2');
4
  font-weight: 400; font-style: normal; font-display: swap;
5
}
6
@font-face {
7
  font-family: 'Iosevka Web';
8
  src: url('/fonts/iosevka-Bold.woff2') format('woff2');
9
  font-weight: 700; font-style: normal; font-display: swap;
10
}
11
@font-face {
12
  font-family: 'Iosevka Web';
13
  src: url('/fonts/iosevka-Italic.woff2') format('woff2');
14
  font-weight: 400; font-style: italic; font-display: swap;
15
}
16
17
:root {
18
  --bg: #1a1b26;
19
  --bg-secondary: #1f2335;
20
  --bg-tertiary: #292e42;
21
  --fg: #c0caf5;
22
  --fg-muted: #a9b1d6;
23
  --fg-subtle: #565f89;
24
  --border: #292e42;
25
  --link: #7aa2f7;
26
  --link-hover: #7dcfff;
27
  --green: #9ece6a;
28
  --red: #f7768e;
29
  --yellow: #e0af68;
30
  --orange: #ff9e64;
31
  --purple: #bb9af7;
32
  --cyan: #7dcfff;
33
  --ml-base: #1f2335;
34
  --ml-mid: #3b4261;
35
  --ml-accent: #7aa2f7;
36
  --ml-accent-fg: #1a1b26;
37
  --blk: #292e42;
38
  --blu: #7aa2f7;
39
  --grn: #9ece6a;
40
  --ylw: #e0af68;
41
  --mag: #bb9af7;
42
  --cyn: #7dcfff;
43
  --brblk: #565f89;
44
  --tokyonight-bg: #1a1b26;
45
  --tokyonight-fg: #c0caf5;
46
  --tokyonight-blue: #7aa2f7;
47
  --tokyonight-green: #9ece6a;
48
  --tokyonight-red: #f7768e;
49
  --tokyonight-yellow: #e0af68;
50
  --tokyonight-comment: #565f89;
51
}
52
53
/* ===== reskinned original site.css (sizing preserved) ===== */
54
::root {
55
  box-sizing: border-box;
56
}
57
58
html {
59
  font-size: 16px;
60
  /* font-weight: bold; */
61
}
62
63
64
.container {
65
  margin-right: auto;
66
  margin-left: auto;
67
  padding-right: 0.75rem;
68
  padding-left: 0.75rem;
69
  max-width: 80rem;
70
}
71
72
@media screen and (max-width: 767px) {
73
  html {
74
    font-size: 16px;
75
  }
76
77
  .logo {
78
    max-width: 200px;
79
  }
80
81
  .row .column:not(:last-child) {
82
    margin-bottom: 1rem;
83
  }
84
85
  .video {
86
    width: 100%;
87
  }
88
89
  .list-form {
90
    width: 90%;
91
  }
92
93
  .newsletter-text {
94
    font-size: 0.42em;
95
  }
96
97
  blockquote {
98
    margin: 1rem 0rem;
99
  }
100
  aside.content-panel {
101
    display: none;
102
  }
103
104
  .container {
105
    margin-right: auto;
106
    margin-left: auto;
107
    padding-right: 1rem;
108
    padding-left: 1rem;
109
    max-width: 100%;
110
  }
111
}
112
113
/* sm */
114
@media screen and (min-width: 768px) {
115
  html {
116
    font-size: 16px;
117
  }
118
119
  .logo {
120
    max-width: 200px;
121
  }
122
123
  .row {
124
    display: flex;
125
    flex-direction: row;
126
    padding: 0;
127
    width: 100%;
128
  }
129
130
  .row .column {
131
    display: block;
132
    flex: 1 1 auto;
133
    max-width: 100%;
134
    width: 100%;
135
  }
136
137
  .row .column:not(:last-child) {
138
    margin-right: 10px;
139
  }
140
141
  .align-right {
142
    text-align: right;
143
  }
144
145
  .video {
146
    width: 70%;
147
  }
148
149
  .list-form {
150
    width: 60%;
151
  }
152
153
  .newsletter-text {
154
    font-size: 0.9em;
155
  }
156
157
  blockquote {
158
    margin: 1rem 2rem;
159
  }
160
}
161
162
/* md */
163
@media screen and (min-width: 992px) {
164
  html {
165
    font-size: 18px;
166
  }
167
168
  .logo {
169
    max-width: 300px;
170
  }
171
172
  blockquote {
173
    margin: 1rem 4rem;
174
  }
175
}
176
177
/* lg */
178
@media screen and (min-width: 2560px) {
179
  html {
180
    font-size: 18px;
181
  }
182
}
183
184
body {
185
  background-color: var(--tokyonight-bg);
186
  color: var(--tokyonight-fg);
187
  /* font-family: 'Iosevka Web', ui-monospace, monospace; */
188
  font-family: 'Iosevka Web', ui-monospace, monospace;
189
  margin: 0;
190
  line-height: 1.5;
191
}
192
193
p {
194
  margin-top: 0;
195
  margin-bottom: 1rem;
196
}
197
198
b {
199
  font-weight: 700;
200
}
201
202
blockquote {
203
  background-color: #1f2335;
204
  font-style: italic;
205
  border: 1px solid;
206
  border-radius: 4px;
207
  border-image: linear-gradient(45deg, #ff9e64, #e0af68) 1;
208
  padding: 1.4rem 1.4rem 0.4rem 1.4rem;
209
}
210
211
blockquote p {
212
  margin-bottom: 0.6rem;
213
}
214
215
dt {
216
  font-weight: bold;
217
}
218
219
dd {
220
  border-left: 3px solid #7aa2f7;
221
  margin: 10px 40px;
222
  padding-left: 10px;
223
}
224
225
226
.nav {
227
  display: flex;
228
  flex-wrap: wrap;
229
  justify-content: center;
230
}
231
232
.subnav {
233
  background-color: #1f2335;
234
  display: flex;
235
  flex-wrap: wrap;
236
  justify-content: center;
237
  margin-top: 2rem;
238
  margin-bottom: 2rem;
239
  font-weight: bold;
240
  padding-top: 0.75rem;
241
  padding-bottom: 0.75rem;
242
  border-top: 0.05rem solid #9ece6a;
243
  border-bottom: 0.05rem solid #9ece6a;
244
}
245
246
.subnav a {  /* margin-top: 2rem; */
247
  /* margin-bottom: 2rem; */
248
249
  margin-left: 0.5rem;
250
  margin-right: 0.5rem;
251
}
252
253
h1,
254
h2,
255
h3,
256
h4,
257
h5,
258
h6 {
259
  color: var(--tokyonight-blue);
260
  font-weight: 600;
261
  line-height: 1.3;
262
  margin-top: 1.3rem;
263
  margin-bottom: 0.5rem;
264
}
265
266
h1 {
267
  color: var(--tokyonight-blue);
268
  font-size: 1.3rem;
269
  font-family: 'Iosevka Web', ui-monospace, monospace;
270
}
271
272
h2 {
273
  color: var(--cyn);
274
  line-height: 1.2;
275
  font-family: 'Iosevka Web', ui-monospace, monospace;
276
}
277
278
h3 {
279
  color: var(--tokyonight-blue);
280
  line-height: 1.1;
281
}
282
283
h4 {
284
  line-height: 1.0;
285
  color: #9ece6a;
286
}
287
288
a {
289
  color: var(--tokyonight-blue);
290
}
291
292
a:hover,
293
a:focus {
294
  text-decoration: underline;
295
  color: #7aa2f7;
296
}
297
298
.anchor {
299
  color: #292e42;
300
  float: left;
301
  padding-right: 4px;
302
  margin-left: -23px;
303
}
304
305
.anchor:hover {
306
  text-decoration: none;
307
}
308
309
h2:hover .anchor,
310
h3:hover .anchor,
311
h4:hover .anchor {
312
  color: inherit;
313
}
314
315
kbd {
316
  font-family: 'Iosevka Web', ui-monospace, monospace;
317
  font-weight: 200;
318
}
319
320
pre {
321
  border: 1px solid var(--tokyonight-blue);
322
  background-color: #1f2335;
323
  padding: 1em;
324
  overflow-x: scroll;
325
  max-width: 100%;
326
  box-sizing: border-box;
327
}
328
329
330
code {
331
  color: var(--mag);
332
  word-break: break-word;
333
  white-space: pre-wrap;
334
}
335
336
pre, code {
337
  /* font-size: 0.75em; */
338
  font-family: 'Iosevka Web', ui-monospace, monospace;
339
}
340
341
strong {
342
  font-weight: 700;
343
}
344
345
.content {
346
  margin-top:
347
}
348
349
350
.logo {
351
  display: block;
352
  padding-top: 0.5rem;
353
  padding-bottom: 0.5rem;
354
  margin-left: auto;
355
  margin-right: auto;
356
  text-align: center;
357
}
358
359
/* Nav links */
360
.nav-link {
361
  position: relative;
362
  padding: 0rem;
363
  font-size: 1.1rem;
364
  margin: 0.4rem 0.8rem 0.4rem 0rem;
365
  font-weight: bold;
366
  color: #c0caf5;
367
}
368
.nav-link:hover,
369
.nav-link:focus {
370
  color: #c0caf5;
371
  background-color: transparent;
372
}
373
374
/* Active state gets a caret at the bottom */
375
.nav-link.active {
376
  color: #c0caf5;
377
  font-weight: bolder;
378
}
379
380
.nav-icon {
381
  float: right;
382
}
383
384
.nav-icons {
385
  width: auto;
386
}
387
388
.site-header {
389
  display: flex;
390
  flex-direction: column;
391
  justify-content: flex-end;  
392
  font-weight: bold;
393
  /* background-image: url("/img/header_bg.png"); */
394
  /* background-image: url("/img/samarkand-bg.png"); */
395
  /* background-image: url("/img/castle-bg.png"); */
396
  background-image: url("/img/forrest-1-bg.png");
397
  /* background-image: url("/img/forrest-2-bg.png"); */
398
  /* background-image: url("/img/mountain-3-bg.png"); */
399
  /* background-image: url("/img/mountain-as-is-bg.png"); */
400
  /* background-image: url("/img/mountain-bg.png"); */
401
  background-size: cover;
402
  background-position: center;
403
  color: #1a1b26;
404
  border-bottom: 1px solid #292e42;
405
406
407
  min-height: 160px;
408
  padding: 0; 
409
}
410
411
.site-masthead {
412
  font-family: 'Iosevka Web', ui-monospace, monospace;
413
  font-weight: bold;
414
  margin-bottom: 0; 
415
  background-color: rgba(28, 31, 38, 0.5);
416
  border-bottom: 0.05rem solid var(--cyn);
417
  -webkit-box-shadow: inset 0 -0.1rem 0.25rem rgba(0, 0, 0, 0.1);
418
  box-shadow: inset 0 -0.1rem 0.25rem rgba(0, 0, 0, 0.1);
419
}
420
421
.site-title {
422
  margin-bottom: 0rem;
423
  font-size: 2rem;
424
  font-weight: bold;
425
  color: #7aa2f7;
426
}
427
.site-description {
428
  font-size: 1.5rem;
429
  color: #565f89;
430
}
431
432
@media (max-width: 40em) {
433
  .site-description {
434
    margin-bottom: 1rem;
435
  }
436
}
437
438
/*
439
 * Site pages
440
 */
441
442
.site-post {
443
  margin-bottom: 2rem;
444
}
445
446
.site-post-title {
447
  font-size: 2.2rem;
448
}
449
450
.site-post-meta {
451
  color: #a9b1d6;
452
}
453
454
.site-post-tags {
455
  margin-top: 3rem;
456
  margin-bottom: 1.25rem;
457
  font-size: 1.1rem;
458
  color: #565f89;
459
}
460
461
/*
462
 * Footer
463
 */
464
465
.site-footer {
466
  padding: 1.3rem 0;
467
  margin-top: 1rem;
468
  color: #c0caf5;
469
  font-size: 0.8rem;
470
  background-color: #1f2335;
471
  border-top: 0.05rem solid #9ece6a;
472
}
473
474
.site-footer p:last-child {
475
  margin-bottom: 0;
476
}
477
478
.site-footer-right {
479
  text-align: right;
480
}
481
482
.site-footer-line {
483
 margin-bottom: 0.4rem;
484
}
485
486
.video {
487
  position: relative;
488
  overflow: hidden;
489
  margin-left: auto;
490
  margin-right: auto;
491
  text-align: center;
492
}
493
494
.center {
495
  display: block;
496
  margin-left: auto;
497
  margin-right: auto;
498
  text-align: center;
499
}
500
501
.bold {
502
  font-weight: bold;
503
}
504
505
hr {
506
  border-bottom: 0.05rem solid #9ece6a;
507
}
508
509
.video::after {
510
  display: block;
511
  content: "";
512
  padding-top: 56.25%;
513
}
514
515
.video iframe {
516
  position: absolute;
517
  top: 0;
518
  left: 0;
519
  border: 0;
520
  width: 100%;
521
  height: 100%;
522
}
523
524
.cta {
525
  width: 80%;
526
  padding: 1rem;
527
  margin-top: 1rem;
528
  margin-bottom: 1rem;
529
  border: 1px solid #ff9e64;
530
  border-radius: 4px;
531
  background-color: #1f2335;
532
}
533
534
.cta p {
535
  margin: 5px;
536
}
537
538
.stream-time {
539
  width: 80%;
540
  padding: 1rem;
541
  margin-top: 1rem;
542
  margin-bottom: 1rem;
543
  border: 1px solid #bb9af7;
544
  border-radius: 4px;
545
  background-color: #1f2335;
546
}
547
548
.list-form {
549
  font-size: 0.8rem;
550
  padding: 1rem;
551
  margin-bottom: 1rem;
552
  border: 1px solid #9ece6a;
553
  border-radius: 4px;
554
  background-color: #1f2335;
555
}
556
557
.list-form-title {
558
  font-weight: 600;
559
  font-size: 1.1rem;
560
  margin-bottom: 0.5rem;
561
  color: #9ece6a;
562
}
563
564
.list-form-label {
565
  margin-top: 0.8rem;
566
  font-weight: bold;
567
}
568
569
.list-form input[type="text"] {
570
  width: 100%;
571
  padding: 7px 7px;
572
  margin: 8px 0;
573
  box-sizing: border-box;
574
  border: 1px solid #9ece6a;
575
  border-radius: 4px;
576
  background-color: #1f2335;
577
  color: #c0caf5;
578
}
579
580
.list-form input[type="submit"] {
581
  width: 50%;
582
  padding: 10px 10px;
583
  margin: 8px 0;
584
  box-sizing: border-box;
585
  border: 1px solid #7aa2f7;
586
  border-radius: 4px;
587
  background-color: #7aa2f7;
588
  color: #1f2335;
589
}
590
591
.newsletter-text {
592
}
593
594
.register-button {
595
  width: 60%;
596
  padding: 10px 10px;
597
  border: 1px solid #7aa2f7;
598
  border-radius: 4px;
599
  background-color: #7aa2f7;
600
  color: #1f2335;
601
}
602
603
a:hover.register-button,
604
a:focus.register-button {
605
  color: #1f2335;
606
}
607
608
aside.content-panel {
609
  margin-top: 0.75rem;
610
  background-color: #1f2335;
611
  border: 1px solid #565f89;
612
  border-radius: 6px;
613
  padding: 1rem;
614
  font-size: 0.9rem;
615
}
616
617
#tableOfContentContainer nav {
618
  padding-left: 0;
619
}
620
621
#tableOfContentContainer nav ul,
622
#tableOfContentContainer nav ol {
623
  list-style: none;
624
  padding-left: 0;
625
}
626
627
#tableOfContentContainer nav ol li > ol,
628
#tableOfContentContainer nav ul li > ul {
629
  margin-left: 1rem;
630
  padding-left: 0.5rem;
631
  border-left: 1px solid #565f89;
632
}
633
634
#tableOfContentContainer nav li {
635
  margin-bottom: 0.5rem;
636
}
637
638
#tableOfContentContainer nav a {
639
  color: var(--tokyonight-blue);
640
  text-decoration: none;
641
}
642
643
#tableOfContentContainer nav a:hover {
644
  text-decoration: underline;
645
}
646
647
.row {
648
  flex-wrap: wrap;
649
}
650
651
.row .column {
652
  min-width: 0;
653
  box-sizing: border-box;
654
}
655
656
.post-hero {
657
  margin: 1.5rem 0;
658
  text-align: center;
659
}
660
661
.post-hero img {
662
  width: 100%;
663
  max-width: 100%;
664
  height: auto;
665
  border-radius: 8px;
666
  border: 1px solid #3b4261; /* optional tokyonight border */
667
}
668
669
670
.tutorial-grid {
671
  display: grid;
672
  grid-template-columns: repeat(3, 1fr); /* max of 3 */
673
  gap: 2rem;
674
  max-width: 1280px;
675
  margin: 0 auto;
676
  padding: 0 1rem;
677
}
678
679
@media (max-width: 1024px) {
680
  .tutorial-grid {
681
    grid-template-columns: repeat(2, 1fr);
682
  }
683
}
684
685
@media (max-width: 600px) {
686
  .tutorial-grid {
687
    grid-template-columns: 1fr;
688
    overflow-x: auto;
689
    scroll-snap-type: x mandatory;
690
    display: grid;
691
  }
692
693
  .tutorial-card {
694
    scroll-snap-align: start;
695
  }
696
}
697
698
/* .tutorial-grid { */
699
/*   display: grid; */
700
/*   grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); */
701
/*   gap: 2rem; */
702
/*   max-width: 1280px; */
703
/*   margin: 0 auto; */
704
/*   padding: 0 1rem; */
705
/* } */
706
707
.tutorial-card-title {
708
  font-size: 1.2rem;
709
  color: #7aa2f7;
710
  margin-bottom: 0.5rem;
711
}
712
713
.tutorial-card-title a {
714
  text-decoration: none;
715
  color: inherit;
716
}
717
718
.tutorial-card-title a:hover {
719
  text-decoration: underline;
720
}
721
722
.tutorial-card-date {
723
  font-size: 0.875rem;
724
  color: #565f89;
725
  margin-bottom: 0.5rem;
726
}
727
728
.tutorial-card-description {
729
  font-size: 0.95rem;
730
  color: #c0caf5;
731
}
732
733
.tutorial-card {
734
  width: 426px;
735
  /* max-width: 480px; */
736
  background-color: var(--blk);
737
  border: 1px solid var(--blu);
738
  border-radius: 8px;
739
  padding: 1rem;
740
  color: #c0caf5;
741
  box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3);
742
  box-sizing: border-box;
743
}
744
745
@media (max-width: 768px) {
746
  .tutorial-card {
747
    width: 100%;
748
  }
749
}
750
751
.tutorial-card-image {
752
  width: 100%;
753
  aspect-ratio: 16 / 9;
754
  border: 1px solid var(--blu);
755
  border-radius: 4px;
756
  margin-bottom: 1rem;
757
  background-color: #16161e;
758
  box-sizing: border-box;
759
}
760
761
.btn-primary {
762
  display: inline-block;
763
  padding: 0.5rem 1.25rem;
764
  border: 2px solid var(--blu);
765
  color: var(--blu);
766
  text-decoration: none;
767
  border-radius: 0.25rem;
768
  font-weight: 600;
769
}
770
771
.btn-primary:hover {
772
  background-color: var(--blu);
773
  color: #000;
774
}
775
776
.btn-outline {
777
  display: inline-block;
778
  padding: 0.5rem 1.25rem;
779
  border: 2px solid var(--cyn);
780
  color: var(--cyn);
781
  text-decoration: none;
782
  border-radius: 0.25rem;
783
  font-weight: 600;
784
}
785
786
.btn-outline-secondary {
787
  display: inline-block;
788
  padding: 0.5rem 1.25rem;
789
  border: 2px solid var(--mag);
790
  color: var(--mag);
791
  text-decoration: none;
792
  border-radius: 0.25rem;
793
  font-weight: 600;
794
}
795
796
.btn-outline-secondary:hover {
797
  background-color: var(--mag);
798
  color: #000;
799
}
800
801
.btn-outline:hover {
802
  background-color: var(--cyn);
803
  color: #000;
804
}
805
806
.recent-tutorials-grid {
807
  display: grid;
808
  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
809
  gap: 2rem;
810
  max-width: 1280px;
811
  margin: 0 auto;
812
  padding: 0 1rem;
813
}
814
815
table {
816
  border-collapse: collapse;
817
  width: 100%;
818
  margin: 1.5rem 0;
819
  font-size: 0.95rem;
820
}
821
822
th, td {
823
  border: 1px solid #565f89;
824
  padding: 0.5rem 0.75rem;
825
  text-align: left;
826
}
827
828
th {
829
  background-color: #1a1b26; /* or your Tokyonight bg */
830
  color: #c0caf5;            /* Tokyonight fg */
831
}
832
833
td {
834
  background-color: #1f2335; /* Slightly lighter bg */
835
  color: #a9b1d6;
836
}
837
838
@media screen and (max-width: 768px) {
839
  table, thead, tbody, th, td, tr {
840
    display: block;
841
  }
842
843
  tr {
844
    margin-bottom: 1rem;
845
  }
846
847
  th {
848
    display: none;
849
  }
850
851
  td {
852
    border: none;
853
    position: relative;
854
    padding-left: 1.5rem;
855
  }
856
857
  td::before {
858
    content: attr(data-label);
859
    position: absolute;
860
    left: 0;
861
    top: 0;
862
    font-weight: bold;
863
    color: #7aa2f7;
864
  }
865
}
866
867
/* ---- vim modeline (from forums.tonybtw.com) ---- */
868
body { padding-bottom: 2.5rem; }
869
870
footer.modeline {
871
  position: fixed; left: 0; right: 0; bottom: 0; z-index: 50;
872
  background: var(--bg); border-top: 1px solid var(--border);
873
  font-size: 0.85rem; line-height: 1.9; overflow: hidden;
874
}
875
.ml-row { display: flex; align-items: stretch; white-space: nowrap; }
876
.ml-a, .ml-b, .ml-c { padding: 0 0.6rem; }
877
.ml-a { background: var(--ml-accent); color: var(--ml-accent-fg); font-weight: 700; }
878
.ml-b { background: var(--ml-mid); color: var(--fg-muted); }
879
.ml-c { background: var(--ml-base); color: var(--fg-muted); }
880
.ml-fill { flex: 1; background: var(--bg); min-width: 1rem; }
881
.ml-sep::before { display: inline-block; }
882
.ml-fwd::before { content: "\e0b0"; }
883
.ml-bwd::before { content: "\e0b2"; }
884
.sep-a-b   { color: var(--ml-accent); background: var(--ml-mid); }
885
.sep-b-c   { color: var(--ml-mid);    background: var(--ml-base); }
886
.sep-c-bar { color: var(--ml-base);   background: var(--bg); }
887
.sep-bar-c { color: var(--ml-base);   background: var(--bg); }
888
.sep-c-b   { color: var(--ml-mid);    background: var(--ml-base); }
889
.sep-b-a   { color: var(--ml-accent); background: var(--ml-mid); }
890
891
/* code blocks: ONE box. plain <pre> and the pandoc wrapper both get exactly one border. */
892
pre { border: 1px solid var(--border); background-color: var(--bg-secondary); overflow-x: auto; }
893
894
div.sourceCode {
895
  background: var(--bg-secondary);
896
  border: 1px solid var(--border);
897
  border-radius: 6px;
898
  margin: 1rem 0;
899
  overflow: hidden;
900
}
901
pre.sourceCode {
902
  margin: 0;
903
  padding: 0.85rem 1rem;
904
  background: none;
905
  border: none;
906
  border-radius: 0;
907
  overflow-x: auto;
908
}
909
pre.sourceCode code, div.sourceCode code { color: var(--fg); white-space: pre; word-break: normal; }
910
.sourceCode a { color: inherit; text-decoration: none; }
911
912
/* pandoc/skylighting token colours -> tokyo night */
913
.sourceCode .kw, .sourceCode .cf              { color: var(--purple); }
914
.sourceCode .fu, .sourceCode .ex, .sourceCode .bu { color: var(--link); }
915
.sourceCode .dt                                { color: var(--cyan); }
916
.sourceCode .st, .sourceCode .ch, .sourceCode .vs, .sourceCode .ss { color: var(--green); }
917
.sourceCode .co                                { color: var(--fg-subtle); font-style: italic; }
918
.sourceCode .dv, .sourceCode .bn, .sourceCode .fl, .sourceCode .cn { color: var(--orange); }
919
.sourceCode .va                                { color: var(--yellow); }
920
.sourceCode .at, .sourceCode .pp               { color: var(--cyan); }
921
.sourceCode .op                                { color: var(--fg-muted); }
922
923
/* ===== overrides: forums-style header + sticky TOC + responsive cards ===== */
924
925
.site-header {
926
  display: flex;
927
  flex-direction: row;
928
  align-items: center;
929
  justify-content: space-between;
930
  flex-wrap: wrap;
931
  gap: 1rem;
932
  background-color: var(--bg-secondary);
933
  background-image: none;
934
  border-bottom: 1px solid var(--border);
935
  min-height: 0;
936
  padding: 1rem 2rem;
937
  color: var(--fg);
938
}
939
.site-masthead {
940
  background-color: transparent;
941
  box-shadow: none;
942
  border: none;
943
  width: 100%;
944
}
945
.navbar {
946
  display: flex;
947
  justify-content: space-between;
948
  align-items: center;
949
  width: 100%;
950
  flex-wrap: wrap;
951
  gap: 1rem;
952
  padding: 0;
953
}
954
.navbar-brand {
955
  font-size: 1.15rem;
956
  font-weight: 700;
957
  background: linear-gradient(to right, var(--link), var(--purple));
958
  -webkit-background-clip: text;
959
  background-clip: text;
960
  -webkit-text-fill-color: transparent;
961
  text-decoration: none;
962
}
963
.navbar-brand:hover { text-decoration: none; filter: brightness(1.15); }
964
.nav-menu {
965
  display: flex;
966
  align-items: center;
967
  gap: 1.25rem;
968
  list-style: none;
969
  margin: 0;
970
  padding: 0;
971
  flex-wrap: wrap;
972
}
973
.nav-menu a { color: var(--fg-muted); text-decoration: none; }
974
.nav-menu a:hover { color: var(--fg); }
975
.nav-menu a.discord {
976
  background: var(--link);
977
  color: var(--ml-accent-fg);
978
  padding: 0.3rem 0.8rem;
979
  border-radius: 4px;
980
  font-weight: 700;
981
}
982
.nav-menu a.discord:hover { text-decoration: none; background: var(--link-hover); }
983
984
/* hamburger (pure CSS, no JS): hidden on desktop */
985
.nav-toggle { display: none; }
986
987
@media (max-width: 768px) {
988
  .nav-toggle {
989
    display: block;
990
    background: none;
991
    border: none;
992
    cursor: pointer;
993
    color: var(--fg);
994
    font-size: 1.6rem;
995
    line-height: 1;
996
    padding: 0 0.25rem;
997
    order: 2;
998
  }
999
  .nav-menu {
1000
    display: none;
1001
    flex-basis: 100%;
1002
    flex-direction: column;
1003
    align-items: stretch;
1004
    gap: 0;
1005
    order: 3;
1006
    margin-top: 0.5rem;
1007
  }
1008
  .nav-toggle-cb:checked ~ .nav-menu { display: flex; }
1009
  .nav-menu li { width: 100%; }
1010
  .nav-menu li a {
1011
    display: block;
1012
    padding: 0.7rem 0.25rem;
1013
    border-top: 1px solid var(--border);
1014
  }
1015
  .nav-menu a.discord {
1016
    display: inline-block;
1017
    width: auto;
1018
    margin: 0.6rem 0.25rem 0;
1019
    border-top: none;
1020
  }
1021
}
1022
1023
.site-post-title { text-align: center; }
1024
.site-post-meta { text-align: center; margin-bottom: 1.5rem; }
1025
1026
main.container > .row {
1027
  display: flex;
1028
  flex-wrap: nowrap;
1029
  align-items: flex-start;
1030
  gap: 2rem;
1031
}
1032
main.container > .row > .column { flex: 1 1 auto; min-width: 0; width: auto; max-width: none; }
1033
aside.content-panel {
1034
  flex: 0 0 260px;
1035
  align-self: flex-start;
1036
  position: sticky;
1037
  top: 1.5rem;
1038
  max-height: calc(100vh - 3rem);
1039
  overflow-y: auto;
1040
}
1041
.content-panel .toc-label {
1042
  font-size: 0.8rem;
1043
  text-transform: uppercase;
1044
  letter-spacing: 0.05em;
1045
  color: var(--fg-subtle);
1046
  display: block;
1047
  margin-bottom: 0.5rem;
1048
}
1049
1050
@media (max-width: 900px) {
1051
  main.container > .row { flex-direction: column; }
1052
  aside.content-panel { display: none; }
1053
}
1054
1055
/* cards: drop the fixed 426px width so the grid is responsive */
1056
.tutorial-card { width: auto; }
1057
.tutorial-card:hover { border-color: var(--link); }
1058
1059
/* ---- tag chips ---- */
1060
.card-tags { display: flex; flex-wrap: wrap; gap: 0.4rem; margin-top: 0.6rem; }
1061
.ctag {
1062
  font-size: 0.75rem;
1063
  color: var(--cyan);
1064
  border: 1px solid var(--border);
1065
  border-radius: 3px;
1066
  padding: 0 0.4rem;
1067
  text-decoration: none;
1068
}
1069
.ctag:hover { border-color: var(--cyan); text-decoration: none; }
1070
1071
/* ---- TOC list (pandoc emits a bare <ul>, not <nav>) ---- */
1072
#tableOfContentContainer ul { list-style: none; padding-left: 0.75rem; margin: 0; }
1073
#tableOfContentContainer > ul { padding-left: 0; }
1074
#tableOfContentContainer li { margin: 0.15rem 0; font-size: 0.9rem; }
1075
#tableOfContentContainer a { color: var(--link); text-decoration: none; }
1076
#tableOfContentContainer a:hover { text-decoration: underline; }
1077
#tableOfContentContainer ul ul { margin-left: 0.75rem; padding-left: 0.5rem; border-left: 1px solid var(--border); }
1078
1079
/* ---- article body images (match original: full-width, centered) ---- */
1080
#content img { max-width: 100%; width: auto; height: auto; display: block; margin: 1rem auto; border-radius: 8px; }