datalog-theme 0.8.0 → 0.9.1

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.
Files changed (127) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +84 -0
  3. data/CITATION.cff +2 -2
  4. data/README.md +4 -2
  5. data/_data/i18n/en.yml +321 -0
  6. data/_data/i18n/es.yml +321 -0
  7. data/_data/i18n/pt.yml +321 -0
  8. data/_data/js_manifest.json +16 -0
  9. data/_includes/components/academic-dashboard.html +4 -4
  10. data/_includes/components/author-bio.html +21 -11
  11. data/_includes/components/author-list.html +32 -0
  12. data/_includes/components/breadcrumbs.html +6 -4
  13. data/_includes/components/citation-tools.html +18 -58
  14. data/_includes/components/comments-thread.html +90 -0
  15. data/_includes/components/contact-form.html +120 -0
  16. data/_includes/components/correction-report.html +82 -0
  17. data/_includes/components/enhanced-toc.html +6 -7
  18. data/_includes/components/hero.html +1 -1
  19. data/_includes/components/license-link.html +13 -0
  20. data/_includes/components/license-notice.html +28 -0
  21. data/_includes/components/moderation-inbox.html +139 -0
  22. data/_includes/components/post-hero.html +2 -2
  23. data/_includes/components/reactions.html +49 -0
  24. data/_includes/components/reading-list.html +34 -0
  25. data/_includes/components/reading-mode-toggle.html +67 -0
  26. data/_includes/components/reading-state-bookmark.html +27 -0
  27. data/_includes/components/reading-state-panel.html +62 -0
  28. data/_includes/components/reading-state-resume.html +17 -0
  29. data/_includes/components/reproducibility.html +61 -0
  30. data/_includes/components/responsive-image.html +3 -3
  31. data/_includes/components/revision-history.html +39 -0
  32. data/_includes/components/revision-notice.html +35 -0
  33. data/_includes/components/series-nav.html +64 -0
  34. data/_includes/components/subscribe-form.html +88 -0
  35. data/_includes/components/subscription-manage.html +69 -0
  36. data/_includes/components/visualization-card.html +1 -1
  37. data/_includes/components/webmentions.html +48 -0
  38. data/_includes/csp-meta.html +21 -1
  39. data/_includes/footer/nav-column.html +1 -1
  40. data/_includes/footer.html +5 -2
  41. data/_includes/head.html +64 -52
  42. data/_includes/header/navigation.html +2 -2
  43. data/_includes/header.html +1 -1
  44. data/_includes/layouts/default/article.html +6 -8
  45. data/_includes/meta/dynamic-services-config.html +14 -0
  46. data/_includes/meta/math-config.html +12 -5
  47. data/_includes/meta/person-json.html +27 -0
  48. data/_includes/meta/publisher.html +45 -0
  49. data/_includes/meta/schema.html +84 -48
  50. data/_includes/meta/scholarly.html +122 -0
  51. data/_includes/meta/scripts-loader.html +2 -0
  52. data/_includes/meta/webmention-discovery.html +14 -0
  53. data/_includes/post/related-posts.html +1 -1
  54. data/_includes/scripts.html +57 -0
  55. data/_layouts/dataset.html +5 -4
  56. data/_layouts/default.html +1 -1
  57. data/_layouts/home.html +2 -2
  58. data/_layouts/notebook.html +1 -1
  59. data/_layouts/package.html +8 -7
  60. data/_layouts/page.html +15 -0
  61. data/_layouts/portfolio.html +1 -1
  62. data/_layouts/post.html +94 -25
  63. data/_layouts/project.html +5 -5
  64. data/_layouts/research.html +27 -75
  65. data/_plugins/authors.rb +151 -0
  66. data/_plugins/citation_exports.rb +93 -0
  67. data/_plugins/config_validator.rb +223 -20
  68. data/_plugins/critical_css_check.rb +42 -0
  69. data/_plugins/i18n.rb +6 -4
  70. data/_plugins/image_optimizer.rb +240 -186
  71. data/_plugins/licenses.rb +147 -0
  72. data/_plugins/math_preprocessor.rb +55 -11
  73. data/_plugins/references.rb +260 -0
  74. data/_plugins/reproducibility.rb +167 -0
  75. data/_plugins/responsive_content.rb +40 -0
  76. data/_plugins/revisions.rb +102 -0
  77. data/_plugins/scholarly.rb +55 -0
  78. data/_plugins/series.rb +104 -0
  79. data/_plugins/statements.rb +87 -0
  80. data/_sass/_base.scss +13 -1
  81. data/_sass/_comments-thread.scss +159 -0
  82. data/_sass/_layout.scss +402 -1
  83. data/_sass/_mathematical.scss +38 -1
  84. data/_sass/_moderation.scss +222 -0
  85. data/_sass/_post-components.scss +4 -2
  86. data/_sass/_print.scss +299 -0
  87. data/_sass/_reactions.scss +89 -0
  88. data/_sass/_reading-state.scss +290 -0
  89. data/_sass/_service-forms.scss +204 -0
  90. data/_sass/_subscriptions.scss +140 -0
  91. data/_sass/_syntax-highlighting.scss +3 -3
  92. data/_sass/_theme.scss +11 -0
  93. data/_sass/_typography.scss +116 -0
  94. data/_sass/_utilities.scss +5 -0
  95. data/_sass/_variables.scss +6 -0
  96. data/_sass/_webmentions.scss +125 -0
  97. data/assets/js/dist/academic.js +1 -1
  98. data/assets/js/dist/analytics-dashboard.js +1 -1
  99. data/assets/js/dist/chunks/chunk-PATLC23F.js +1 -0
  100. data/assets/js/dist/chunks/chunk-VZ5WKQVA.js +1 -0
  101. data/assets/js/dist/chunks/chunk-WIRUK3OZ.js +1 -0
  102. data/assets/js/dist/comments.js +2 -0
  103. data/assets/js/dist/contact.js +1 -0
  104. data/assets/js/dist/core.js +1 -1
  105. data/assets/js/dist/corrections.js +1 -0
  106. data/assets/js/dist/loader.js +1 -1
  107. data/assets/js/dist/math.js +1 -1
  108. data/assets/js/dist/moderation.js +1 -0
  109. data/assets/js/dist/notebook.js +1 -1
  110. data/assets/js/dist/reactions.js +1 -0
  111. data/assets/js/dist/reading-state.js +1 -0
  112. data/assets/js/dist/search.js +1 -1
  113. data/assets/js/dist/sources.json +52 -0
  114. data/assets/js/dist/subscriptions.js +1 -0
  115. data/assets/js/dist/visualizations.js +2 -2
  116. data/assets/js/dist/webmentions.js +1 -0
  117. data/assets/js/loader.js +34 -0
  118. data/datalog-theme.gemspec +1 -2
  119. data/lib/datalog/cli.rb +9 -1
  120. data/lib/datalog/critical_css.rb +168 -0
  121. data/lib/datalog/plugins/comments.rb +33 -3
  122. data/lib/datalog/theme/installed_files.rb +113 -0
  123. data/lib/datalog/theme/repository_checkout.rb +6 -2
  124. data/lib/datalog/theme/version.rb +5 -1
  125. data/lib/datalog-theme.rb +1 -0
  126. metadata +60 -23
  127. data/assets/js/dist/chunks/chunk-225H5YXE.js +0 -1
@@ -0,0 +1,159 @@
1
+ @use 'sass:map';
2
+
3
+ @use 'variables' as *;
4
+
5
+ // The comments thread of the `api` provider (components/comments-thread.html,
6
+ // assets/js/comments/thread.js). The form itself is a .service-form
7
+ // (_service-forms.scss).
8
+
9
+ .comments-thread {
10
+ max-width: $max-width-reading;
11
+ }
12
+
13
+ .comments-thread__status {
14
+ margin: 0 0 map.get($spacing, 3);
15
+ color: $color-ink-500;
16
+ font-size: map.get($font-size-scale, sm);
17
+
18
+ .comments-thread[data-state='error'] & {
19
+ color: $color-danger-700;
20
+ }
21
+ }
22
+
23
+ .comments-thread__noscript {
24
+ margin: 0 0 map.get($spacing, 3);
25
+ color: $color-ink-500;
26
+ }
27
+
28
+ .comments-thread__list,
29
+ .comments-thread__replies {
30
+ list-style: none;
31
+ margin: 0;
32
+ padding: 0;
33
+ }
34
+
35
+ .comments-thread__list {
36
+ display: grid;
37
+ gap: map.get($spacing, 3);
38
+ margin-bottom: map.get($spacing, 5);
39
+ }
40
+
41
+ // display: grid and display: flex would override the hidden attribute.
42
+ .comments-thread__list[hidden],
43
+ .comments-form__replying[hidden] {
44
+ display: none;
45
+ }
46
+
47
+ .comments-thread__replies {
48
+ display: grid;
49
+ gap: map.get($spacing, 3);
50
+ margin-top: map.get($spacing, 3);
51
+ padding-left: map.get($spacing, 4);
52
+ border-left: 2px solid rgba($color-neutral-500, 0.25);
53
+ }
54
+
55
+ .comment__card {
56
+ padding: map.get($spacing, 3) map.get($spacing, 4);
57
+ border-radius: map.get($radius, md);
58
+ background: rgba($color-neutral-500, 0.06);
59
+ }
60
+
61
+ .comment--pending > .comment__card {
62
+ border: 1px dashed rgba($color-neutral-500, 0.5);
63
+ background: transparent;
64
+ }
65
+
66
+ .comment__meta {
67
+ display: flex;
68
+ flex-wrap: wrap;
69
+ align-items: baseline;
70
+ gap: map.get($spacing, 2);
71
+ margin-bottom: map.get($spacing, 2);
72
+ font-size: map.get($font-size-scale, sm);
73
+ }
74
+
75
+ .comment__author {
76
+ font-weight: 600;
77
+ color: $color-ink-900;
78
+ }
79
+
80
+ .comment__time {
81
+ color: $color-ink-500;
82
+ }
83
+
84
+ .comment__pending {
85
+ padding: 0 map.get($spacing, 2);
86
+ border-radius: map.get($radius, sm);
87
+ background: rgba($color-neutral-500, 0.15);
88
+ color: $color-ink-700;
89
+ font-size: map.get($font-size-scale, xs);
90
+ }
91
+
92
+ .comment__body {
93
+ overflow-wrap: anywhere;
94
+
95
+ p {
96
+ margin: 0 0 map.get($spacing, 2);
97
+ }
98
+
99
+ p:last-child {
100
+ margin-bottom: 0;
101
+ }
102
+ }
103
+
104
+ .comment__reply {
105
+ margin-top: map.get($spacing, 2);
106
+ }
107
+
108
+ .comments-form__heading {
109
+ margin: 0 0 map.get($spacing, 2);
110
+ font-size: map.get($font-size-scale, md);
111
+ }
112
+
113
+ .comments-form__replying {
114
+ display: flex;
115
+ flex-wrap: wrap;
116
+ align-items: center;
117
+ gap: map.get($spacing, 2);
118
+ margin: 0 0 map.get($spacing, 3);
119
+ color: $color-ink-700;
120
+ font-size: map.get($font-size-scale, sm);
121
+ }
122
+
123
+ body.dark-mode {
124
+ .comments-thread__status,
125
+ .comments-thread__noscript,
126
+ .comment__time {
127
+ color: $dark-ink-500;
128
+ }
129
+
130
+ .comments-thread[data-state='error'] .comments-thread__status {
131
+ color: $color-danger-300;
132
+ }
133
+
134
+ .comment__card {
135
+ background: rgba($dark-ink-500, 0.12);
136
+ }
137
+
138
+ .comment--pending > .comment__card {
139
+ border-color: rgba($dark-ink-500, 0.5);
140
+ background: transparent;
141
+ }
142
+
143
+ .comment__author {
144
+ color: $dark-ink-900;
145
+ }
146
+
147
+ .comment__pending,
148
+ .comments-form__replying {
149
+ color: $dark-ink-700;
150
+ }
151
+
152
+ .comment__pending {
153
+ background: rgba($dark-ink-500, 0.2);
154
+ }
155
+
156
+ .comments-thread__replies {
157
+ border-left-color: rgba($dark-ink-500, 0.35);
158
+ }
159
+ }
data/_sass/_layout.scss CHANGED
@@ -62,7 +62,8 @@ body.dark-mode .page-meta {
62
62
  }
63
63
  }
64
64
 
65
- aside {
65
+ .package-docs__sidebar,
66
+ .notebook-article__sidebar {
66
67
  position: sticky;
67
68
  top: 6.5rem;
68
69
  }
@@ -1029,6 +1030,24 @@ body.dark-mode .post-author-affiliation {
1029
1030
  color: $dark-ink-500;
1030
1031
  }
1031
1032
 
1033
+ // Bylines list one or more people, side by side while they fit.
1034
+ .author-list {
1035
+ display: flex;
1036
+ flex-wrap: wrap;
1037
+ gap: 0.25rem 1rem;
1038
+ margin: 0;
1039
+ padding: 0;
1040
+ list-style: none;
1041
+ }
1042
+
1043
+ .author-list__role {
1044
+ color: $color-ink-500;
1045
+ }
1046
+
1047
+ body.dark-mode .author-list__role {
1048
+ color: $dark-ink-500;
1049
+ }
1050
+
1032
1051
  .post-notebook-link {
1033
1052
  font-weight: 500;
1034
1053
  }
@@ -1092,6 +1111,12 @@ body.dark-mode .post-category {
1092
1111
  }
1093
1112
  }
1094
1113
 
1114
+ // Without a table of contents (no headings, or `toc: false`) the article is the
1115
+ // wrapper's first child and would land in the 14rem column meant for the contents.
1116
+ .post-body-wrapper > .post-content:first-child {
1117
+ grid-column: 1 / -1;
1118
+ }
1119
+
1095
1120
  .post-content {
1096
1121
  min-width: 0;
1097
1122
 
@@ -1130,6 +1155,22 @@ body.dark-mode .post-category {
1130
1155
  }
1131
1156
  }
1132
1157
 
1158
+ .post-content,
1159
+ .page-content {
1160
+ min-width: 0;
1161
+
1162
+ p, li, a {
1163
+ overflow-wrap: anywhere;
1164
+ }
1165
+
1166
+ }
1167
+
1168
+ .content-table {
1169
+ max-width: 100%;
1170
+ min-width: 0;
1171
+ overflow-x: auto;
1172
+ }
1173
+
1133
1174
  body.dark-mode .post-content {
1134
1175
  blockquote {
1135
1176
  border-left-color: $dark-accent-primary;
@@ -1734,6 +1775,366 @@ body.wide .post-content {
1734
1775
  }
1735
1776
  }
1736
1777
 
1778
+ // The newest correction or update of an article, under its metadata, and its
1779
+ // revision history after the body (_plugins/revisions.rb).
1780
+ .revision-notice {
1781
+ @include callout($color-accent-tertiary);
1782
+ font-size: map.get($font-size-scale, sm);
1783
+
1784
+ p {
1785
+ margin: 0;
1786
+ max-width: $max-width-reading;
1787
+ }
1788
+
1789
+ // Links keep their contrast on the tinted background.
1790
+ a {
1791
+ color: $color-accent-primary-text;
1792
+
1793
+ &:hover,
1794
+ &:focus {
1795
+ color: $color-accent-secondary-text;
1796
+ }
1797
+ }
1798
+ }
1799
+
1800
+ .revision-notice--correction {
1801
+ @include callout($color-warning);
1802
+ }
1803
+
1804
+ body.dark-mode .revision-notice {
1805
+ border-left-color: $dark-accent-tertiary;
1806
+ }
1807
+
1808
+ body.dark-mode .revision-notice--correction {
1809
+ border-left-color: $dark-warning;
1810
+ }
1811
+
1812
+ .revision-history__list {
1813
+ list-style: none;
1814
+ margin: 0;
1815
+ padding: 0;
1816
+ display: grid;
1817
+ gap: map.get($spacing, 3);
1818
+ }
1819
+
1820
+ .revision-history__item {
1821
+ display: flex;
1822
+ flex-wrap: wrap;
1823
+ align-items: baseline;
1824
+ gap: map.get($spacing, 1) map.get($spacing, 3);
1825
+ max-width: $max-width-reading;
1826
+ font-size: map.get($font-size-scale, sm);
1827
+ }
1828
+
1829
+ .revision-history__date {
1830
+ font-weight: 600;
1831
+ color: $color-ink-700;
1832
+ }
1833
+
1834
+ .revision-history__type {
1835
+ font-size: map.get($font-size-scale, xs);
1836
+ font-weight: 600;
1837
+ text-transform: uppercase;
1838
+ letter-spacing: 0.04em;
1839
+ padding: 0.1rem 0.5rem;
1840
+ border-radius: map.get($radius, sm);
1841
+ background: rgba($color-accent-secondary, 0.1);
1842
+ color: $color-accent-secondary-text;
1843
+ }
1844
+
1845
+ .revision-history__item--correction .revision-history__type {
1846
+ background: rgba($color-warning, 0.12);
1847
+ color: $color-warning-text;
1848
+ }
1849
+
1850
+ .revision-history__item--published .revision-history__type {
1851
+ background: rgba($color-neutral-500, 0.12);
1852
+ color: $color-ink-700;
1853
+ }
1854
+
1855
+ .revision-history__summary {
1856
+ flex-basis: 100%;
1857
+ }
1858
+
1859
+ body.dark-mode {
1860
+ .revision-history__date {
1861
+ color: $dark-ink-700;
1862
+ }
1863
+
1864
+ .revision-history__type {
1865
+ background: rgba($dark-accent-secondary, 0.15);
1866
+ color: $dark-accent-secondary;
1867
+ }
1868
+
1869
+ .revision-history__item--correction .revision-history__type {
1870
+ background: rgba($dark-warning, 0.15);
1871
+ color: $dark-warning;
1872
+ }
1873
+
1874
+ .revision-history__item--published .revision-history__type {
1875
+ background: rgba($dark-ink-500, 0.15);
1876
+ color: $dark-ink-700;
1877
+ }
1878
+ }
1879
+
1880
+ // The reuse terms of an article: the copyright, the licence of the text and
1881
+ // figures, and of the code samples (_plugins/licenses.rb).
1882
+ .content-license {
1883
+ font-size: map.get($font-size-scale, sm);
1884
+ color: $color-ink-500;
1885
+ max-width: $max-width-reading;
1886
+ margin: 0;
1887
+ }
1888
+
1889
+ body.dark-mode .content-license {
1890
+ color: $dark-ink-500;
1891
+ }
1892
+
1893
+ @media print {
1894
+ // On paper, the licence keeps its address.
1895
+ .content-license a[href]::after {
1896
+ content: " (" attr(href) ")";
1897
+ }
1898
+ }
1899
+
1900
+ // Navigation within an article series (_plugins/series.rb): the parts in
1901
+ // order at the top of the article, the previous and next parts at its end.
1902
+ .series-nav {
1903
+ @include callout($color-accent-secondary);
1904
+ font-size: map.get($font-size-scale, sm);
1905
+ max-width: $max-width-reading;
1906
+
1907
+ // Links keep their contrast on the tinted background.
1908
+ a {
1909
+ color: $color-accent-primary-text;
1910
+
1911
+ &:hover,
1912
+ &:focus {
1913
+ color: $color-accent-secondary-text;
1914
+ }
1915
+ }
1916
+ }
1917
+
1918
+ .series-nav--compact {
1919
+ margin-top: map.get($spacing, 5);
1920
+ }
1921
+
1922
+ .series-nav__heading {
1923
+ display: flex;
1924
+ flex-wrap: wrap;
1925
+ align-items: baseline;
1926
+ gap: map.get($spacing, 1) map.get($spacing, 3);
1927
+ margin: 0 0 map.get($spacing, 2);
1928
+ }
1929
+
1930
+ .series-nav__label,
1931
+ .series-nav__link-label {
1932
+ font-size: map.get($font-size-scale, xs);
1933
+ font-weight: 600;
1934
+ text-transform: uppercase;
1935
+ letter-spacing: 0.04em;
1936
+ color: $color-ink-500;
1937
+ }
1938
+
1939
+ .series-nav__title {
1940
+ font-size: map.get($font-size-scale, base);
1941
+ font-weight: 600;
1942
+ color: $color-ink-900;
1943
+ }
1944
+
1945
+ .series-nav__position,
1946
+ .series-nav__context,
1947
+ .series-nav__description {
1948
+ margin: 0 0 map.get($spacing, 2);
1949
+ color: $color-ink-500;
1950
+ }
1951
+
1952
+ .series-nav__position {
1953
+ margin: 0;
1954
+ }
1955
+
1956
+ .series-nav__progress {
1957
+ display: block;
1958
+ width: 100%;
1959
+ height: 0.375rem;
1960
+ margin: 0 0 map.get($spacing, 3);
1961
+ border: 0;
1962
+ border-radius: map.get($radius, sm);
1963
+ background: rgba($color-neutral-500, 0.15);
1964
+ appearance: none;
1965
+
1966
+ &::-webkit-progress-bar {
1967
+ background: transparent;
1968
+ }
1969
+
1970
+ &::-webkit-progress-value {
1971
+ background: $color-accent-secondary;
1972
+ border-radius: map.get($radius, sm);
1973
+ }
1974
+
1975
+ &::-moz-progress-bar {
1976
+ background: $color-accent-secondary;
1977
+ border-radius: map.get($radius, sm);
1978
+ }
1979
+ }
1980
+
1981
+ .series-nav__list {
1982
+ display: grid;
1983
+ gap: map.get($spacing, 1);
1984
+ margin: 0 0 map.get($spacing, 3);
1985
+ padding-left: 1.5rem;
1986
+ }
1987
+
1988
+ .series-nav__part--current a {
1989
+ font-weight: 600;
1990
+ color: $color-ink-900;
1991
+ text-decoration: none;
1992
+ }
1993
+
1994
+ .series-nav__links {
1995
+ display: flex;
1996
+ flex-wrap: wrap;
1997
+ justify-content: space-between;
1998
+ gap: map.get($spacing, 2) map.get($spacing, 4);
1999
+ }
2000
+
2001
+ .series-nav__link {
2002
+ display: grid;
2003
+ gap: 0;
2004
+ font-weight: 600;
2005
+ }
2006
+
2007
+ .series-nav__link--next {
2008
+ margin-left: auto;
2009
+ text-align: right;
2010
+ }
2011
+
2012
+ body.dark-mode {
2013
+ .series-nav {
2014
+ border-left-color: $dark-accent-secondary;
2015
+ }
2016
+
2017
+ .series-nav__label,
2018
+ .series-nav__link-label,
2019
+ .series-nav__position,
2020
+ .series-nav__context,
2021
+ .series-nav__description {
2022
+ color: $dark-ink-500;
2023
+ }
2024
+
2025
+ .series-nav__title,
2026
+ .series-nav__part--current a {
2027
+ color: $dark-ink-900;
2028
+ }
2029
+
2030
+ .series-nav__progress {
2031
+ background: rgba($dark-ink-500, 0.2);
2032
+
2033
+ &::-webkit-progress-value,
2034
+ &::-moz-progress-bar {
2035
+ background: $dark-accent-secondary;
2036
+ }
2037
+ }
2038
+ }
2039
+
2040
+ @media print {
2041
+ .series-nav {
2042
+ border-left-color: currentColor;
2043
+ background: none;
2044
+ }
2045
+
2046
+ .series-nav__progress {
2047
+ display: none;
2048
+ }
2049
+ }
2050
+
2051
+ // The computational artifacts behind an article (_plugins/reproducibility.rb).
2052
+ .reproduce {
2053
+ @include callout($color-accent-tertiary);
2054
+ font-size: map.get($font-size-scale, sm);
2055
+ max-width: $max-width-reading;
2056
+
2057
+ // Links keep their contrast on the tinted background.
2058
+ a {
2059
+ color: $color-accent-primary-text;
2060
+
2061
+ &:hover,
2062
+ &:focus {
2063
+ color: $color-accent-secondary-text;
2064
+ }
2065
+ }
2066
+
2067
+ code {
2068
+ font-size: 0.9em;
2069
+ }
2070
+ }
2071
+
2072
+ .reproduce__heading {
2073
+ margin: 0 0 map.get($spacing, 1);
2074
+ font-size: map.get($font-size-scale, base);
2075
+ }
2076
+
2077
+ .reproduce__intro {
2078
+ margin: 0 0 map.get($spacing, 3);
2079
+ color: $color-ink-500;
2080
+ }
2081
+
2082
+ .reproduce__list {
2083
+ display: grid;
2084
+ gap: map.get($spacing, 2);
2085
+ margin: 0;
2086
+
2087
+ > div {
2088
+ display: grid;
2089
+ grid-template-columns: 7rem minmax(0, 1fr);
2090
+ gap: map.get($spacing, 1) map.get($spacing, 3);
2091
+ align-items: baseline;
2092
+ }
2093
+
2094
+ dt {
2095
+ font-weight: 600;
2096
+ }
2097
+
2098
+ dd {
2099
+ display: flex;
2100
+ flex-wrap: wrap;
2101
+ gap: map.get($spacing, 1) map.get($spacing, 3);
2102
+ margin: 0;
2103
+ min-width: 0;
2104
+ overflow-wrap: anywhere;
2105
+ }
2106
+ }
2107
+
2108
+ .reproduce__detail {
2109
+ color: $color-ink-700;
2110
+ }
2111
+
2112
+ body.dark-mode {
2113
+ .reproduce {
2114
+ border-left-color: $dark-accent-tertiary;
2115
+ }
2116
+
2117
+ .reproduce__intro {
2118
+ color: $dark-ink-500;
2119
+ }
2120
+
2121
+ .reproduce__detail {
2122
+ color: $dark-ink-700;
2123
+ }
2124
+ }
2125
+
2126
+ @media print {
2127
+ .reproduce {
2128
+ border-left-color: currentColor;
2129
+ background: none;
2130
+ }
2131
+
2132
+ // On paper, every artifact keeps its address.
2133
+ .reproduce a[href]::after {
2134
+ content: " (" attr(href) ")";
2135
+ }
2136
+ }
2137
+
1737
2138
  // Editorial provenance note (why_this_exists, evidence, methodology, reviewed_at).
1738
2139
  .content-provenance {
1739
2140
  @include callout($color-accent-secondary);
@@ -12,6 +12,9 @@
12
12
  background: rgba($color-neutral-100, 0.9);
13
13
  box-shadow: 0 12px 30px rgba($color-neutral-900, 0.08);
14
14
  display: grid;
15
+ min-width: 0;
16
+ max-width: 100%;
17
+ overflow-x: auto;
15
18
  gap: map.get($spacing, 3);
16
19
  transition: border-color $transition-snappy, box-shadow $transition-snappy, background $transition-snappy;
17
20
 
@@ -22,7 +25,41 @@
22
25
  }
23
26
 
24
27
  mjx-container[display='true'] {
25
- justify-self: center;
28
+ justify-self: start;
29
+ min-width: max-content;
30
+ margin-inline: auto;
31
+ }
32
+
33
+ .katex-display {
34
+ min-width: max-content;
35
+ margin-inline: auto;
36
+ }
37
+ }
38
+
39
+ // The keyboard's and the screen reader's way to an equation that MathJax links
40
+ // from inside its aria-hidden output (assets/js/math.js, exposeReferenceLinks):
41
+ // out of sight until it takes the focus.
42
+ .math-reference-link {
43
+ position: absolute;
44
+ width: 1px;
45
+ height: 1px;
46
+ margin: -1px;
47
+ padding: 0;
48
+ overflow: hidden;
49
+ clip-path: inset(50%);
50
+ white-space: nowrap;
51
+ border: 0;
52
+
53
+ &:focus,
54
+ &:focus-visible {
55
+ position: static;
56
+ width: auto;
57
+ height: auto;
58
+ margin: 0 0 0 map.get($spacing, 1);
59
+ padding: 0 map.get($spacing, 1);
60
+ overflow: visible;
61
+ clip-path: none;
62
+ font-size: map.get($font-size-scale, sm);
26
63
  }
27
64
  }
28
65