astro-accelerator 5.10.44 → 5.10.46

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "5.10.44",
2
+ "version": "5.10.46",
3
3
  "author": "Steve Fenton",
4
4
  "name": "astro-accelerator",
5
5
  "description": "A super-lightweight, accessible, SEO-friendly starter project for Astro",
@@ -337,35 +337,6 @@ tbody tr:nth-child(odd) {
337
337
  color: var(--fore-table-row-odd);
338
338
  }
339
339
 
340
- /* Skip Links */
341
-
342
- nav.skip-links {
343
- position: absolute;
344
- }
345
-
346
- nav.skip-links a {
347
- clip: rect(0 0 0 0);
348
- background-color: var(--aft);
349
- min-width: 20vw;
350
- overflow: hidden;
351
- padding: 1rem;
352
- position: absolute;
353
- z-index: 15;
354
- text-align: center;
355
- display: inline-block;
356
- height: 1px;
357
- margin: -1px;
358
- width: 1px;
359
- }
360
-
361
- nav.skip-links a:focus {
362
- clip: auto;
363
- height: auto;
364
- margin: 0.2em;
365
- overflow: visible;
366
- width: auto;
367
- }
368
-
369
340
  /* Breadcrumbs */
370
341
 
371
342
  .site-breadcrumbs ol {
@@ -394,130 +365,8 @@ nav.skip-links a:focus {
394
365
  text-decoration: none;
395
366
  }
396
367
 
397
- /* Header */
398
- .site-header {
399
- text-align: center;
400
- font-size: 2rem;
401
- gap: 2rem;
402
- display: grid;
403
- grid-template-columns: auto 40px 40px;
404
- align-items: center;
405
- padding-block: 2rem;
406
- width: var(--content-width);
407
- margin-inline: auto;
408
- max-width: calc(100vw - 2rem);
409
- stroke: var(--fore);
410
- }
411
-
412
- a.site-title {
413
- text-align: left;
414
- text-decoration: none;
415
- }
416
-
417
- a.navigation-icon {
418
- color: var(--fore-link);
419
- text-decoration: none;
420
- align-self: center;
421
- height: 40px;
422
- padding: 0.4rem 0;
423
- }
424
-
425
- a.site-title:hover,
426
- a.site-title:focus,
427
- a.navigation-icon:hover,
428
- a.navigation-icon:focus {
429
- color: var(--fore-link-alt);
430
- background-color: unset;
431
- }
432
-
433
- .site-header .site-title {
434
- letter-spacing: -0.03em;
435
- font-family: var(--heading-font);
436
- line-height: 1.3;
437
- flex-shrink: 0;
438
- }
439
-
440
- .site-header .header-icon {
441
- --icon-width: 40px;
442
- stroke: var(--fore-link);
443
- width: var(--icon-width);
444
- height: var(--icon-width);
445
- }
446
-
447
- .site-header .header-icon {
448
- text-decoration: none;
449
- }
450
-
451
- .site-header .header-icon:hover,
452
- .site-header .header-icon:focus {
453
- stroke: var(--fore-link-alt);
454
- }
455
-
456
- .site-header .header-icon[data-navigation-id='site-nav'] {
457
- position: relative;
458
- z-index: 100;
459
- }
460
-
461
368
  /* Navigation */
462
369
 
463
- .site-nav {
464
- --site-nav-indent: 0.5rem;
465
- font-size: var(--font-size-meta);
466
- }
467
-
468
- .site-nav>ul {
469
- border-bottom: 1px solid var(--fore-link);
470
- }
471
-
472
- .site-nav li {
473
- list-style: none;
474
- }
475
-
476
- .site-nav>ul>li {
477
- border-top: 1px solid var(--fore-link);
478
- }
479
-
480
- .site-nav>ul>li li {
481
- border-top: 1px solid color-mix(in srgb, var(--fore-link) 50%, transparent);
482
- }
483
-
484
- .site-nav a {
485
- text-indent: var(--marker-size);
486
- width: calc(100% - 2.07rem);
487
- display: inline-block;
488
- padding: 1rem var(--site-nav-indent);
489
- text-decoration: none;
490
- }
491
-
492
- .site-nav a[aria-current] {
493
- font-weight: bold;
494
- }
495
-
496
- .site-nav details summary {
497
- cursor: pointer;
498
- }
499
-
500
- .site-nav details summary::-webkit-details-marker,
501
- .site-nav details summary::marker {
502
- font-size: var(--marker-size);
503
- width: 1em;
504
- }
505
-
506
- .site-nav li.has-children summary span {
507
- text-indent: 0;
508
- display: inline-block;
509
- padding: 1rem var(--site-nav-indent);
510
- text-decoration: none;
511
- }
512
-
513
- details.sub-nav {
514
- padding: 0rem !important;
515
- }
516
-
517
- details.sub-nav details {
518
- margin-inline-start: calc(var(--marker-size) + var(--site-nav-indent));
519
- }
520
-
521
370
  .overlay-menu .site-nav {
522
371
  font-size: 1.4em;
523
372
 
@@ -666,99 +515,6 @@ details.sub-nav details {
666
515
 
667
516
  /* Site Search */
668
517
 
669
- .site-search-wrapper fieldset {
670
- height: 100%;
671
- display: flex;
672
- align-items: center;
673
- padding: 0;
674
- }
675
-
676
- .site-search-wrapper input {
677
- background-color: var(--aft-block);
678
- border-radius: var(--block-radius);
679
- color: var(--fore);
680
- font-size: 1.3rem;
681
- padding: 0.5em;
682
- }
683
-
684
- .site-search-wrapper input {
685
- width: calc(100% - 110px);
686
- }
687
-
688
- .site-search-wrapper button {
689
- width: 80px;
690
- }
691
-
692
- .site-search-results ul.site-search-results-list {
693
- list-style-type: none;
694
- margin-block: 1rem;
695
- margin-inline: 0;
696
- }
697
-
698
- .site-search-results li.site-search-results-item {
699
- list-style-type: none;
700
- margin: var(--block-gap-l) 0 var(--block-gap-l) 0;
701
- }
702
-
703
- .site-search-results-item a {
704
- text-decoration: none;
705
- }
706
-
707
- .site-search-results .show-more {
708
- margin-block-start: 1rem;
709
- display: inline-block;
710
- font-size: 1.2rem;
711
- border-radius: 100px;
712
- text-decoration: none;
713
- text-align: center;
714
- padding: 0.2em 0.6em 0.3em 0.6em;
715
- color: var(--aft-link-alt);
716
- background-color: var(--fore-link);
717
- cursor: pointer;
718
- width: auto;
719
- }
720
-
721
- .result-wrapper mark,
722
- .result-headings mark {
723
- color: unset;
724
- background-color: unset;
725
- text-decoration: underline;
726
- }
727
-
728
- .result-path {
729
- display: none;
730
- }
731
-
732
- .result-path-icon {
733
- stroke: var(--fore);
734
- }
735
-
736
- .result-path-segment:last-child {
737
- color: var(--fore-link);
738
- }
739
-
740
- .result-title {
741
- color: var(--fore-link);
742
- font-size: 1.5rem;
743
- font-weight: 700;
744
- }
745
-
746
- .result-description {
747
- color: var(--fore-block);
748
- font-size: 1rem;
749
- font-weight: 400;
750
- margin: 0;
751
- }
752
-
753
- .result-headings {
754
- list-style: none;
755
- font-size: 1rem;
756
- }
757
-
758
- .result-headings li:not(:last-child) {
759
- text-align: left;
760
- }
761
-
762
518
  /* Articles */
763
519
 
764
520
  .post-list {
@@ -1028,73 +784,6 @@ details.sub-nav details {
1028
784
 
1029
785
  /* Taxonomy */
1030
786
 
1031
- .footer-columns {
1032
- display: grid;
1033
- gap: var(--block-gap);
1034
- grid-template-columns: 1fr 1fr;
1035
- grid-template-areas:
1036
- 'cat tag'
1037
- 'quick quick';
1038
- justify-content: center;
1039
- margin-block-end: var(--block-gap-l);
1040
- max-width: 1000px;
1041
- margin-inline: auto;
1042
-
1043
- @media (max-width: 680px) {
1044
- display: block;
1045
- margin-inline: 0.5rem;
1046
- }
1047
- }
1048
-
1049
- .footer-column:nth-child(1) {
1050
- grid-area: cat;
1051
- }
1052
-
1053
- .footer-column:nth-child(2) {
1054
- grid-area: tag;
1055
- }
1056
-
1057
- .footer-column:nth-child(3) {
1058
- grid-area: quick;
1059
- }
1060
-
1061
- .footer-columns h2 {
1062
- margin: var(--paragraph-margin) auto;
1063
- }
1064
-
1065
- .footer-columns ul {
1066
- display: flex;
1067
- flex-wrap: wrap;
1068
- gap: var(--grid-gap-s);
1069
- justify-content: center;
1070
- list-style: none;
1071
- margin: var(--paragraph-margin) 0;
1072
- width: 100%;
1073
- }
1074
-
1075
- .footer-columns li {
1076
- flex: 0 0 auto;
1077
- }
1078
-
1079
- .footer-columns a {
1080
- display: inline-block;
1081
- color: var(--fore-link);
1082
- background-color: var(--aft);
1083
- padding: 0.3em 0.7em 0.1em 0.7em;
1084
- text-decoration: none;
1085
- font-size: var(--font-size-meta);
1086
- }
1087
-
1088
- .footer-columns a:hover,
1089
- .footer-columns a:focus {
1090
- background-color: var(--fore-link-alt);
1091
- color: var(--aft);
1092
- }
1093
-
1094
- .site-footer nav {
1095
- margin-block: var(--block-gap);
1096
- }
1097
-
1098
787
  /* Video */
1099
788
 
1100
789
  .yt-video {
@@ -1176,6 +865,7 @@ pre.astro-code code {
1176
865
  stroke: var(--aft);
1177
866
  fill: var(--fore-link-alt);
1178
867
  background-color: transparent;
868
+ border: none;
1179
869
  }
1180
870
 
1181
871
  .copy-button:hover,
@@ -1198,14 +888,15 @@ pre.astro-code code {
1198
888
  .magnify-button {
1199
889
  border-radius: 0.2rem;
1200
890
  fill: var(--aft);
1201
- stroke: var(--fore-link-alt);
891
+ stroke: var(--fore-link);
1202
892
  background-color: transparent;
1203
893
  opacity: 0;
894
+ border: none;
1204
895
  }
1205
896
 
1206
897
  .magnify-button:hover,
1207
898
  .magnify-button:focus {
1208
- stroke: var(--fore-link);
899
+ stroke: var(--aft);
1209
900
  transform: rotate(4deg);
1210
901
  opacity: 1;
1211
902
  }
@@ -1355,87 +1046,6 @@ figure:focus .magnify-button {
1355
1046
  margin: 0;
1356
1047
  }
1357
1048
 
1358
- /* Events timeline */
1359
-
1360
- .timeline {
1361
- --timeline-gap: 1rem;
1362
- position: relative;
1363
- }
1364
-
1365
- .timeline h2,
1366
- .timeline h3 {
1367
- margin: 0 0 0.5rem 0;
1368
- font-size: var(--font-size-h4)
1369
- }
1370
-
1371
- .timeline::before {
1372
- background-color: var(--icon-block);
1373
- bottom: 0;
1374
- content: '';
1375
- left: var(--timeline-gap);
1376
- position: absolute;
1377
- top: calc(var(--block-gap) * -1);
1378
- width: 0.4rem;
1379
- }
1380
-
1381
- .timeline-event {
1382
- padding-inline-start: calc(var(--timeline-gap) * 2.5);
1383
- position: relative;
1384
- margin-block-end: var(--block-gap);
1385
- }
1386
-
1387
- .timeline-event::before {
1388
- background: var(--aft);
1389
- border: 3px solid var(--icon-block);
1390
- border-radius: 50%;
1391
- box-shadow: var(--box-shadow-unselected);
1392
- content: '';
1393
- height: 1rem;
1394
- left: calc(var(--timeline-gap) - 0.5rem);
1395
- position: absolute;
1396
- top: 1.4em;
1397
- width: 1rem;
1398
- z-index: 1;
1399
- }
1400
-
1401
- .timeline-event>div {
1402
- background: var(--aft-block);
1403
- border-radius: var(--block-radius);
1404
- box-shadow: var(--box-shadow-unselected);
1405
- color: var(--fore-block);
1406
- padding: 1.5rem;
1407
- text-align: left;
1408
- }
1409
-
1410
- .timeline-event.event-today>div {
1411
- box-shadow: var(--box-glow);
1412
- }
1413
-
1414
- .timeline-event.event-past>div {
1415
- background: var(--aft);
1416
- box-shadow: none;
1417
- color: var(--fore);
1418
- opacity: 0.8;
1419
- }
1420
-
1421
- .timeline-details {
1422
- font-size: var(--font-size-meta);
1423
- }
1424
-
1425
- .timeline time {
1426
- display: inline-block;
1427
- margin-block-end: var(--grid-gap);
1428
- }
1429
-
1430
- .timeline-location {
1431
- display: block;
1432
- font-size: var(--font-size-meta);
1433
- }
1434
-
1435
- .timeline-event.event-past::before {
1436
- box-shadow: var(--box-shadow-unselected);
1437
- }
1438
-
1439
1049
  /* Animation */
1440
1050
 
1441
1051
  @media (prefers-reduced-motion: no-preference) {
@@ -11,7 +11,26 @@ import { qs, qsa } from './query.js';
11
11
 
12
12
  const activeClass = 'magnify-icon';
13
13
 
14
- const icon = `<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" fill="none" stroke-width="1" stroke-linecap="round" stroke-linejoin="round"> <path d="M10 10m-7 0a7 7 0 1 0 14 0a7 7 0 1 0 -14 0"></path> <path d="M21 21l-6 -6"></path> </svg>`;
14
+ const icon = `<!--
15
+ version: "2.28"
16
+ unicode: "fb79"
17
+ -->
18
+ <svg
19
+ xmlns="http://www.w3.org/2000/svg"
20
+ width="32"
21
+ height="32"
22
+ viewBox="0 0 24 24"
23
+ fill="none"
24
+ stroke-width="1"
25
+ stroke-linecap="round"
26
+ stroke-linejoin="round"
27
+ >
28
+ <path d="M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" />
29
+ <path d="M12.597 17.981a9.467 9.467 0 0 1 -.597 .019c-3.6 0 -6.6 -2 -9 -6c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6c-.205 .342 -.415 .67 -.63 .983" />
30
+ <path d="M16 22l5 -5" />
31
+ <path d="M21 21.5v-4.5h-4.5" />
32
+ </svg>
33
+ `;
15
34
 
16
35
  /**
17
36
  * Enables opening image in new tab
@@ -21,7 +40,7 @@ function enhanceFigures() {
21
40
  const src = node.src;
22
41
 
23
42
  const magnify = document.createElement('button');
24
- //magnify.classList.add(activeClass);
43
+
25
44
  magnify.innerHTML = icon;
26
45
  magnify.classList.add('magnify-button');
27
46
  magnify.title = 'Enlarge';
@@ -1,22 +1,22 @@
1
1
  ---
2
2
  // warning: This file is overwritten by Astro Accelerator
3
3
 
4
- import { Accelerator } from 'astro-accelerator-utils';
5
- import type { Frontmatter } from 'astro-accelerator-utils/types/Frontmatter';
6
- import { SITE } from '@config';
7
- import { Translations, Lang } from '@util/Languages';
8
- import { menu } from 'src/data/footer';
9
- import FooterItem from '@components/FooterItem.astro';
4
+ import { Accelerator } from "astro-accelerator-utils";
5
+ import type { Frontmatter } from "astro-accelerator-utils/types/Frontmatter";
6
+ import { SITE } from "@config";
7
+ import { Translations, Lang } from "@util/Languages";
8
+ import { menu } from "src/data/footer";
9
+ import FooterItem from "@components/FooterItem.astro";
10
10
 
11
11
  const accelerator = new Accelerator(SITE);
12
- const stats = new accelerator.statistics('accelerator/components/Footer.astro');
12
+ const stats = new accelerator.statistics("accelerator/components/Footer.astro");
13
13
  stats.start();
14
14
 
15
15
  // Properties
16
16
  type Props = {
17
17
  lang: string;
18
- frontmatter: Frontmatter
19
- headings: { depth: number; slug: string; text: string; }[];
18
+ frontmatter: Frontmatter;
19
+ headings: { depth: number; slug: string; text: string }[];
20
20
  };
21
21
  const { lang } = Astro.props satisfies Props;
22
22
 
@@ -25,15 +25,89 @@ const _ = Lang(lang);
25
25
 
26
26
  // Logic
27
27
  const currentUrl = new URL(Astro.request.url);
28
- const pages = accelerator.navigation.footer(currentUrl, _, Translations, SITE.subfolder, menu);
28
+ const pages = accelerator.navigation.footer(
29
+ currentUrl,
30
+ _,
31
+ Translations,
32
+ SITE.subfolder,
33
+ menu,
34
+ );
29
35
 
30
36
  stats.stop();
31
37
  ---
38
+
32
39
  <footer class="site-footer" id="site-footer">
33
40
  <div class="footer-columns">
34
- {pages.map((page) => (
35
- <FooterItem lang={ lang } page={ page } />
36
- ))}
41
+ {pages.map((page) => <FooterItem lang={lang} page={page} />)}
37
42
  </div>
38
43
  <slot />
39
- </footer>
44
+ </footer>
45
+
46
+ <style is:global>
47
+ .footer-columns {
48
+ display: grid;
49
+ gap: var(--block-gap);
50
+ grid-template-columns: 1fr 1fr;
51
+ grid-template-areas:
52
+ "cat tag"
53
+ "quick quick";
54
+ justify-content: center;
55
+ margin-block-end: var(--block-gap-l);
56
+ max-width: 1000px;
57
+ margin-inline: auto;
58
+
59
+ @media (max-width: 680px) {
60
+ display: block;
61
+ margin-inline: 0.5rem;
62
+ }
63
+ }
64
+
65
+ .footer-column:nth-child(1) {
66
+ grid-area: cat;
67
+ }
68
+
69
+ .footer-column:nth-child(2) {
70
+ grid-area: tag;
71
+ }
72
+
73
+ .footer-column:nth-child(3) {
74
+ grid-area: quick;
75
+ }
76
+
77
+ .footer-columns h2 {
78
+ margin: var(--paragraph-margin) auto;
79
+ }
80
+
81
+ .footer-columns ul {
82
+ display: flex;
83
+ flex-wrap: wrap;
84
+ gap: var(--grid-gap-s);
85
+ justify-content: center;
86
+ list-style: none;
87
+ margin: var(--paragraph-margin) 0;
88
+ width: 100%;
89
+ }
90
+
91
+ .footer-columns li {
92
+ flex: 0 0 auto;
93
+ }
94
+
95
+ .footer-columns a {
96
+ display: inline-block;
97
+ color: var(--fore-link);
98
+ background-color: var(--aft);
99
+ padding: 0.3em 0.7em 0.1em 0.7em;
100
+ text-decoration: none;
101
+ font-size: var(--font-size-meta);
102
+ }
103
+
104
+ .footer-columns a:hover,
105
+ .footer-columns a:focus {
106
+ background-color: var(--fore-link-alt);
107
+ color: var(--aft);
108
+ }
109
+
110
+ .site-footer nav {
111
+ margin-block: var(--block-gap);
112
+ }
113
+ </style>
@@ -1,13 +1,13 @@
1
1
  ---
2
2
  // warning: This file is overwritten by Astro Accelerator
3
3
 
4
- import { Accelerator, PostFiltering } from 'astro-accelerator-utils';
5
- import type { Frontmatter } from 'astro-accelerator-utils/types/Frontmatter';
6
- import { SITE } from '@config';
7
- import { Translations, Lang } from '@util/Languages';
4
+ import { Accelerator, PostFiltering } from "astro-accelerator-utils";
5
+ import type { Frontmatter } from "astro-accelerator-utils/types/Frontmatter";
6
+ import { SITE } from "@config";
7
+ import { Translations, Lang } from "@util/Languages";
8
8
 
9
9
  const accelerator = new Accelerator(SITE);
10
- const stats = new accelerator.statistics('accelerator/components/Header.astro');
10
+ const stats = new accelerator.statistics("accelerator/components/Header.astro");
11
11
  stats.start();
12
12
 
13
13
  // Properties
@@ -22,15 +22,72 @@ const { lang, showSearch } = Astro.props satisfies Props;
22
22
  // Language
23
23
  const _ = Lang(lang);
24
24
 
25
- const search = accelerator.posts.all().filter(PostFiltering.isSearch).shift() ?? null;
26
- const searchUrl = (search && accelerator.urlFormatter.formatAddress(search.url)) || SITE.search.fallbackUrl;
25
+ const search =
26
+ accelerator.posts.all().filter(PostFiltering.isSearch).shift() ?? null;
27
+ const searchUrl =
28
+ (search && accelerator.urlFormatter.formatAddress(search.url)) ||
29
+ SITE.search.fallbackUrl;
27
30
 
28
31
  stats.stop();
29
32
  ---
30
33
 
34
+ <style is:global>
35
+ .site-header {
36
+ text-align: center;
37
+ font-size: 2rem;
38
+ gap: 2rem;
39
+ display: grid;
40
+ grid-template-columns: auto 40px 40px;
41
+ align-items: center;
42
+ padding-block: 2rem;
43
+ width: var(--content-width);
44
+ margin-inline: auto;
45
+ max-width: calc(100vw - 2rem);
46
+ stroke: var(--fore);
47
+ }
48
+
49
+ .site-header .site-title {
50
+ text-align: left;
51
+ text-decoration: none;
52
+ letter-spacing: -0.03em;
53
+ font-family: var(--heading-font);
54
+ line-height: 1.3;
55
+ flex-shrink: 0;
56
+ }
57
+
58
+ .site-header .site-title:hover,
59
+ .site-header .site-title:focus {
60
+ color: var(--fore-link-alt);
61
+ background-color: unset;
62
+ }
63
+
64
+ .site-header .header-icon {
65
+ --icon-width: 40px;
66
+ stroke: var(--fore-link);
67
+ width: var(--icon-width);
68
+ height: var(--icon-width);
69
+ text-decoration: none;
70
+ }
71
+
72
+ .site-header .header-icon:hover,
73
+ .site-header .header-icon:focus {
74
+ stroke: var(--fore-link-alt);
75
+ }
76
+
77
+ .site-header .header-icon[data-navigation-id="site-nav"] {
78
+ position: relative;
79
+ z-index: 100;
80
+ }
81
+ </style>
82
+
31
83
  <header class="site-header">
32
- <a href={(SITE.subfolder ?? '') + '/'} class="site-title" translate="no">{SITE.title}</a>
33
- <a href={searchUrl} class="header-icon" title={_(Translations.header.toggle_search)}>
84
+ <a href={(SITE.subfolder ?? "") + "/"} class="site-title" translate="no"
85
+ >{SITE.title}</a
86
+ >
87
+ <a
88
+ href={searchUrl}
89
+ class="header-icon"
90
+ title={_(Translations.header.toggle_search)}>
34
91
  <svg
35
92
  xmlns="http://www.w3.org/2000/svg"
36
93
  width="32"
@@ -44,7 +101,11 @@ stats.stop();
44
101
  <path d="M21 21l-6 -6"></path>
45
102
  </svg>
46
103
  </a>
47
- <a href="#site-nav" data-navigation-id="site-nav" class="header-icon" title={_(Translations.header.toggle_menu)}>
104
+ <a
105
+ href="#site-nav"
106
+ data-navigation-id="site-nav"
107
+ class="header-icon"
108
+ title={_(Translations.header.toggle_menu)}>
48
109
  <svg
49
110
  xmlns="http://www.w3.org/2000/svg"
50
111
  width="32"
@@ -1,14 +1,16 @@
1
1
  ---
2
2
  // warning: This file is overwritten by Astro Accelerator
3
3
 
4
- import { Accelerator } from 'astro-accelerator-utils';
5
- import { Translations, Lang } from '@util/Languages';
6
- import NavigationItem from '@components/NavigationItem.astro';
7
- import { SITE } from '@config';
8
- import { menu } from '@data/navigation';
4
+ import { Accelerator } from "astro-accelerator-utils";
5
+ import { Translations, Lang } from "@util/Languages";
6
+ import NavigationItem from "@components/NavigationItem.astro";
7
+ import { SITE } from "@config";
8
+ import { menu } from "@data/navigation";
9
9
 
10
10
  const accelerator = new Accelerator(SITE);
11
- const stats = new accelerator.statistics('accelerator/components/Navigation.astro');
11
+ const stats = new accelerator.statistics(
12
+ "accelerator/components/Navigation.astro",
13
+ );
12
14
  stats.start();
13
15
 
14
16
  // Properties
@@ -26,11 +28,77 @@ const pages = accelerator.navigation.menu(currentUrl, SITE.subfolder, menu);
26
28
 
27
29
  stats.stop();
28
30
  ---
29
- <nav class="site-nav" id="site-nav" aria-label={ _(Translations.aria.site_navigation) }>
30
- <h2 class="site-nav-title">{ _(Translations.navigation.title) }</h2>
31
+
32
+ <nav
33
+ class="site-nav"
34
+ id="site-nav"
35
+ aria-label={_(Translations.aria.site_navigation)}>
36
+ <h2 class="site-nav-title">{_(Translations.navigation.title)}</h2>
31
37
  <ul>
32
- {pages.sort((a, b) => a.order - b.order).map((page) => (
33
- <NavigationItem lang={ lang } page={ page } />
34
- ))}
38
+ {
39
+ pages
40
+ .sort((a, b) => a.order - b.order)
41
+ .map((page) => <NavigationItem lang={lang} page={page} />)
42
+ }
35
43
  </ul>
36
- </nav>
44
+ </nav>
45
+
46
+ <style is:global>
47
+ .site-nav {
48
+ --site-nav-indent: 0.5rem;
49
+ font-size: var(--font-size-meta);
50
+ }
51
+
52
+ .site-nav > ul {
53
+ border-bottom: 1px solid var(--fore-link);
54
+ }
55
+
56
+ .site-nav li {
57
+ list-style: none;
58
+ }
59
+
60
+ .site-nav > ul > li {
61
+ border-top: 1px solid var(--fore-link);
62
+ }
63
+
64
+ .site-nav > ul > li li {
65
+ border-top: 1px solid color-mix(in srgb, var(--fore-link) 50%, transparent);
66
+ }
67
+
68
+ .site-nav a {
69
+ text-indent: var(--marker-size);
70
+ width: calc(100% - 2.07rem);
71
+ display: inline-block;
72
+ padding: 1rem var(--site-nav-indent);
73
+ text-decoration: none;
74
+ }
75
+
76
+ .site-nav a[aria-current] {
77
+ font-weight: bold;
78
+ }
79
+
80
+ .site-nav details summary {
81
+ cursor: pointer;
82
+ }
83
+
84
+ .site-nav details summary::-webkit-details-marker,
85
+ .site-nav details summary::marker {
86
+ font-size: var(--marker-size);
87
+ width: 1em;
88
+ }
89
+
90
+ .site-nav li.has-children summary span {
91
+ text-indent: 0;
92
+ display: inline-block;
93
+ padding: 1rem var(--site-nav-indent);
94
+ text-decoration: none;
95
+ }
96
+
97
+ details.sub-nav {
98
+ padding: 0rem !important;
99
+ }
100
+
101
+ details.sub-nav details {
102
+ margin-inline-start: calc(var(--marker-size) + var(--site-nav-indent));
103
+ }
104
+ </style>
@@ -34,3 +34,98 @@ const accelerator = new Accelerator(SITE);
34
34
  <script src={SITE.subfolder + "/js/search.js"} type="module" async></script>
35
35
  }
36
36
  </div>
37
+
38
+ <style is:global>
39
+ .site-search-wrapper fieldset {
40
+ height: 100%;
41
+ display: flex;
42
+ align-items: center;
43
+ padding: 0;
44
+ }
45
+
46
+ .site-search-wrapper input {
47
+ background-color: var(--aft-block);
48
+ border-radius: var(--block-radius);
49
+ color: var(--fore);
50
+ font-size: 1.3rem;
51
+ padding: 0.5em;
52
+ }
53
+
54
+ .site-search-wrapper input {
55
+ width: calc(100% - 110px);
56
+ }
57
+
58
+ .site-search-wrapper button {
59
+ width: 80px;
60
+ }
61
+
62
+ .site-search-results ul.site-search-results-list {
63
+ list-style-type: none;
64
+ margin-block: 1rem;
65
+ margin-inline: 0;
66
+ }
67
+
68
+ .site-search-results li.site-search-results-item {
69
+ list-style-type: none;
70
+ margin: var(--block-gap-l) 0 var(--block-gap-l) 0;
71
+ }
72
+
73
+ .site-search-results-item a {
74
+ text-decoration: none;
75
+ }
76
+
77
+ .site-search-results .show-more {
78
+ margin-block-start: 1rem;
79
+ display: inline-block;
80
+ font-size: 1.2rem;
81
+ border-radius: 100px;
82
+ text-decoration: none;
83
+ text-align: center;
84
+ padding: 0.2em 0.6em 0.3em 0.6em;
85
+ color: var(--aft-link-alt);
86
+ background-color: var(--fore-link);
87
+ cursor: pointer;
88
+ width: auto;
89
+ }
90
+
91
+ .result-wrapper mark,
92
+ .result-headings mark {
93
+ color: unset;
94
+ background-color: unset;
95
+ text-decoration: underline;
96
+ }
97
+
98
+ .result-path {
99
+ display: none;
100
+ }
101
+
102
+ .result-path-icon {
103
+ stroke: var(--fore);
104
+ }
105
+
106
+ .result-path-segment:last-child {
107
+ color: var(--fore-link);
108
+ }
109
+
110
+ .result-title {
111
+ color: var(--fore-link);
112
+ font-size: 1.5rem;
113
+ font-weight: 700;
114
+ }
115
+
116
+ .result-description {
117
+ color: var(--fore-block);
118
+ font-size: 1rem;
119
+ font-weight: 400;
120
+ margin: 0;
121
+ }
122
+
123
+ .result-headings {
124
+ list-style: none;
125
+ font-size: 1rem;
126
+ }
127
+
128
+ .result-headings li:not(:last-child) {
129
+ text-align: left;
130
+ }
131
+ </style>
@@ -1,20 +1,22 @@
1
1
  ---
2
2
  // warning: This file is overwritten by Astro Accelerator
3
3
 
4
- import type { Frontmatter } from 'astro-accelerator-utils/types/Frontmatter';
5
- import { Translations, Lang } from '@util/Languages';
6
- import { Accelerator } from 'astro-accelerator-utils';
7
- import { SITE } from '@config';
4
+ import type { Frontmatter } from "astro-accelerator-utils/types/Frontmatter";
5
+ import { Translations, Lang } from "@util/Languages";
6
+ import { Accelerator } from "astro-accelerator-utils";
7
+ import { SITE } from "@config";
8
8
 
9
9
  const accelerator = new Accelerator(SITE);
10
- const stats = new accelerator.statistics('accelerator/components/SkipLinks.astro');
10
+ const stats = new accelerator.statistics(
11
+ "accelerator/components/SkipLinks.astro",
12
+ );
11
13
  stats.start();
12
14
 
13
15
  // Properties
14
16
  type Props = {
15
17
  lang: string;
16
- frontmatter: Frontmatter
17
- headings: { depth: number; slug: string; text: string; }[];
18
+ frontmatter: Frontmatter;
19
+ headings: { depth: number; slug: string; text: string }[];
18
20
  };
19
21
  const { lang } = Astro.props satisfies Props;
20
22
 
@@ -24,8 +26,41 @@ const _ = Lang(lang);
24
26
  // Logic
25
27
  stats.stop();
26
28
  ---
27
- <nav class="skip-links" aria-label={ _(Translations.aria.skiplinks) } id="site-top">
28
- <a href="#site-nav">{ _(Translations.skiplinks.skip_to_navigation) }</a>
29
- <a href="#site-main">{ _(Translations.skiplinks.skip_to_content) }</a>
30
- <a href="#site-footer">{ _(Translations.skiplinks.skip_to_footer) }</a>
31
- </nav>
29
+
30
+ <nav
31
+ class="skip-links"
32
+ aria-label={_(Translations.aria.skiplinks)}
33
+ id="site-top">
34
+ <a href="#site-nav">{_(Translations.skiplinks.skip_to_navigation)}</a>
35
+ <a href="#site-main">{_(Translations.skiplinks.skip_to_content)}</a>
36
+ <a href="#site-footer">{_(Translations.skiplinks.skip_to_footer)}</a>
37
+ </nav>
38
+
39
+ <style is:global>
40
+ .skip-links {
41
+ position: absolute;
42
+ }
43
+
44
+ .skip-links a {
45
+ clip: rect(0 0 0 0);
46
+ background-color: var(--aft);
47
+ min-width: 20vw;
48
+ overflow: hidden;
49
+ padding: 1rem;
50
+ position: absolute;
51
+ z-index: 15;
52
+ text-align: center;
53
+ display: inline-block;
54
+ height: 1px;
55
+ margin: -1px;
56
+ width: 1px;
57
+ }
58
+
59
+ .skip-links a:focus {
60
+ clip: auto;
61
+ height: auto;
62
+ margin: 0.2em;
63
+ overflow: visible;
64
+ width: auto;
65
+ }
66
+ </style>
@@ -1,53 +1,103 @@
1
1
  ---
2
2
  // warning: This file is overwritten by Astro Accelerator
3
3
 
4
- import type { Frontmatter } from 'astro-accelerator-utils/types/Frontmatter';
5
- import { SITE } from '@config';
6
- import { Translations, Lang } from '@util/Languages';
7
- import { Accelerator } from 'astro-accelerator-utils';
4
+ import type { Frontmatter } from "astro-accelerator-utils/types/Frontmatter";
5
+ import { SITE } from "@config";
6
+ import { Translations, Lang } from "@util/Languages";
7
+ import { Accelerator } from "astro-accelerator-utils";
8
8
 
9
9
  const accelerator = new Accelerator(SITE);
10
- const stats = new accelerator.statistics('accelerator/components/TableOfContents.astro');
10
+ const stats = new accelerator.statistics(
11
+ "accelerator/components/TableOfContents.astro",
12
+ );
11
13
  stats.start();
12
14
 
13
15
  // Properties
14
16
  type Props = {
15
17
  lang: string;
16
18
  frontmatter: Frontmatter;
17
- headings: { depth: number; slug: string; text: string; }[];
19
+ headings: { depth: number; slug: string; text: string }[];
18
20
  maxLevel?: number;
19
21
  expanded?: boolean | number;
20
22
  };
21
- let { lang, frontmatter, headings, maxLevel, expanded } = Astro.props satisfies Props;
23
+ let { lang, frontmatter, headings, maxLevel, expanded } =
24
+ Astro.props satisfies Props;
22
25
 
23
26
  // Language
24
27
  const _ = Lang(lang);
25
28
 
26
29
  // Logic
27
- let openAttribute = null;
30
+ let openAttribute = null;
28
31
  let openInteraction = null;
29
32
 
30
- if (maxLevel == null){
33
+ if (maxLevel == null) {
31
34
  maxLevel = 3;
32
35
  }
33
36
 
34
- if (typeof expanded === 'number') {
37
+ if (typeof expanded === "number") {
35
38
  openInteraction = expanded;
36
39
  } else if (expanded === true) {
37
- openAttribute = 'open';
40
+ openAttribute = "open";
38
41
  }
39
42
 
40
43
  stats.stop();
41
44
  ---
42
- {headings?.length > 0 &&
43
- <nav class="page-toc" aria-label={ _(Translations.aria.toc) }>
44
- <details open={ openAttribute } data-openon={ openInteraction }>
45
- <summary>{ _(Translations.toc.title) }</summary>
46
- <ol>
47
- {headings.filter(h => h.depth <= maxLevel).map((heading) =>(
48
- <li class={ 'toc-lev-' + heading.depth }><a href={ '#' + heading.slug }>{ heading.text }</a></li>
49
- ))}
50
- </ol>
51
- </details>
52
- </nav>
53
- }
45
+
46
+ {
47
+ headings?.length > 0 && (
48
+ <nav class="page-toc" aria-label={_(Translations.aria.toc)}>
49
+ <details open={openAttribute} data-openon={openInteraction}>
50
+ <summary>{_(Translations.toc.title)}</summary>
51
+ <ol>
52
+ {headings
53
+ .filter((h) => h.depth <= maxLevel)
54
+ .map((heading) => (
55
+ <li class={"toc-lev-" + heading.depth}>
56
+ <a href={"#" + heading.slug}>{heading.text}</a>
57
+ </li>
58
+ ))}
59
+ </ol>
60
+ </details>
61
+ </nav>
62
+ )
63
+ }
64
+
65
+ <style is:global>
66
+ .page-toc {
67
+ margin: 0 0 var(--paragraph-margin) 0;
68
+ font-size: var(--font-size-meta);
69
+ }
70
+
71
+ .page-toc ol {
72
+ list-style: none;
73
+ }
74
+
75
+ .page-toc li a {
76
+ display: block;
77
+ padding: 0.5rem 1rem;
78
+ }
79
+
80
+ .page-toc li.toc-lev-2 {
81
+ margin-left: 0rem;
82
+ }
83
+
84
+ .page-toc li.toc-lev-3 a {
85
+ margin-left: 1rem;
86
+ }
87
+
88
+ .page-toc li.toc-lev-4 a {
89
+ margin-left: 2rem;
90
+ }
91
+
92
+ .page-toc li.toc-lev-5 a {
93
+ margin-left: 3rem;
94
+ }
95
+
96
+ .page-toc li.toc-lev-6 a {
97
+ margin-left: 4rem;
98
+ }
99
+
100
+ .page-toc summary {
101
+ cursor: pointer;
102
+ }
103
+ </style>
@@ -64,3 +64,63 @@ const displayDate = formatDate(date);
64
64
  }
65
65
  </div>
66
66
  </div>
67
+
68
+ <style is:global>
69
+ .timeline-event {
70
+ padding-inline-start: calc(var(--timeline-gap) * 2.5);
71
+ position: relative;
72
+ margin-block-end: var(--block-gap);
73
+ }
74
+
75
+ .timeline-event::before {
76
+ background: var(--aft);
77
+ border: 3px solid var(--icon-block);
78
+ border-radius: 50%;
79
+ box-shadow: var(--box-shadow-unselected);
80
+ content: "";
81
+ height: 1rem;
82
+ left: calc(var(--timeline-gap) - 0.5rem);
83
+ position: absolute;
84
+ top: 1.4em;
85
+ width: 1rem;
86
+ z-index: 1;
87
+ }
88
+
89
+ .timeline-event > div {
90
+ background: var(--aft-block);
91
+ border-radius: var(--block-radius);
92
+ box-shadow: var(--box-shadow-unselected);
93
+ color: var(--fore-block);
94
+ padding: 1.5rem;
95
+ text-align: left;
96
+ }
97
+
98
+ .timeline-event.event-today > div {
99
+ box-shadow: var(--box-glow);
100
+ }
101
+
102
+ .timeline-event.event-past > div {
103
+ background: var(--aft);
104
+ box-shadow: none;
105
+ color: var(--fore);
106
+ opacity: 0.8;
107
+ }
108
+
109
+ .timeline-event.event-past::before {
110
+ box-shadow: var(--box-shadow-unselected);
111
+ }
112
+
113
+ .timeline-details {
114
+ font-size: var(--font-size-meta);
115
+ }
116
+
117
+ time {
118
+ display: inline-block;
119
+ margin-block-end: var(--grid-gap);
120
+ }
121
+
122
+ .timeline-location {
123
+ display: block;
124
+ font-size: var(--font-size-meta);
125
+ }
126
+ </style>
@@ -81,16 +81,28 @@ const renderedYears = await (async () => {
81
81
  </Fragment>
82
82
  ))
83
83
  }
84
+ </DefaultLayout>
84
85
 
85
- {
86
- isArchive ? (
87
- <p>
88
- <a href="/events/">Return to upcoming events</a>
89
- </p>
90
- ) : (
91
- <p>
92
- <a href="/events-archive/">View the events archive</a>
93
- </p>
94
- )
86
+ <style is:global>
87
+ /* Events timeline */
88
+ .timeline {
89
+ --timeline-gap: 1rem;
90
+ position: relative;
95
91
  }
96
- </DefaultLayout>
92
+
93
+ .timeline h2,
94
+ .timeline h3 {
95
+ margin: 0 0 0.5rem 0;
96
+ font-size: var(--font-size-h4);
97
+ }
98
+
99
+ .timeline::before {
100
+ background-color: var(--icon-block);
101
+ bottom: 0;
102
+ content: "";
103
+ left: var(--timeline-gap);
104
+ position: absolute;
105
+ top: calc((var(--block-gap) + 1px) * -1);
106
+ width: 0.4rem;
107
+ }
108
+ </style>