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,222 @@
1
+ @use 'sass:map';
2
+
3
+ @use 'variables' as *;
4
+ @use 'mixins' as *;
5
+
6
+ // The moderation inbox (components/moderation-inbox.html, assets/js/moderation/inbox.js).
7
+
8
+ .moderation {
9
+ margin-top: map.get($spacing, 5);
10
+ }
11
+
12
+ .moderation__boundary {
13
+ margin: 0 0 map.get($spacing, 4);
14
+ padding: map.get($spacing, 3) map.get($spacing, 4);
15
+ border-left: 3px solid $color-accent-secondary;
16
+ background: rgba($color-neutral-500, 0.08);
17
+ font-size: map.get($font-size-scale, sm);
18
+ }
19
+
20
+ .moderation__filter-grid {
21
+ @include respond-to(md) {
22
+ grid-template-columns: repeat(3, 1fr);
23
+ }
24
+ }
25
+
26
+ .moderation__status,
27
+ .moderation__sign-in {
28
+ margin: map.get($spacing, 4) 0;
29
+ padding: map.get($spacing, 2) map.get($spacing, 3);
30
+ border-radius: map.get($radius, sm);
31
+ background: rgba($color-neutral-500, 0.1);
32
+ font-size: map.get($font-size-scale, sm);
33
+ }
34
+
35
+ .moderation[data-state='error'] .moderation__status,
36
+ .moderation[data-state='unauthorized'] .moderation__status,
37
+ .moderation[data-state='forbidden'] .moderation__status {
38
+ background: rgba($color-danger-500, 0.1);
39
+ color: $color-danger-700;
40
+ }
41
+
42
+ .moderation__sign-in a {
43
+ font-weight: 600;
44
+ text-decoration: underline;
45
+ }
46
+
47
+ .moderation__list {
48
+ list-style: none;
49
+ margin: map.get($spacing, 4) 0;
50
+ padding: 0;
51
+ display: grid;
52
+ gap: map.get($spacing, 4);
53
+ }
54
+
55
+ .moderation-item__card {
56
+ padding: map.get($spacing, 4);
57
+ border: 1px solid rgba($color-neutral-200, 0.9);
58
+ border-left-width: 4px;
59
+ border-radius: map.get($radius, md);
60
+ font-size: map.get($font-size-scale, sm);
61
+ }
62
+
63
+ .moderation-item--correction .moderation-item__card {
64
+ border-left-color: $color-accent-secondary;
65
+ }
66
+
67
+ .moderation-item--abuse .moderation-item__card {
68
+ border-left-color: $color-danger-600;
69
+ }
70
+
71
+ .moderation-item[aria-busy='true'] {
72
+ opacity: 0.7;
73
+ }
74
+
75
+ .moderation-item__meta {
76
+ display: flex;
77
+ flex-wrap: wrap;
78
+ align-items: baseline;
79
+ gap: map.get($spacing, 2);
80
+ margin-bottom: map.get($spacing, 2);
81
+ }
82
+
83
+ .moderation-item__type,
84
+ .moderation-item__status,
85
+ .moderation-item__category {
86
+ padding: 0 map.get($spacing, 2);
87
+ border-radius: map.get($radius, sm);
88
+ background: rgba($color-neutral-500, 0.15);
89
+ color: $color-ink-700;
90
+ font-size: map.get($font-size-scale, xs);
91
+ font-weight: 600;
92
+ }
93
+
94
+ .moderation-item__type {
95
+ text-transform: uppercase;
96
+ letter-spacing: 0.04em;
97
+ }
98
+
99
+ .moderation-item__time,
100
+ .moderation-item__author,
101
+ .moderation-item__where {
102
+ margin: 0 0 map.get($spacing, 1);
103
+ color: $color-ink-500;
104
+ }
105
+
106
+ .moderation-item__body {
107
+ margin: map.get($spacing, 3) 0;
108
+ overflow-wrap: anywhere;
109
+
110
+ p {
111
+ margin: 0 0 map.get($spacing, 2);
112
+ }
113
+ }
114
+
115
+ .moderation-item__context,
116
+ .moderation-item__quote {
117
+ margin: map.get($spacing, 2) 0;
118
+ padding: 0 0 0 map.get($spacing, 3);
119
+ border-left: 3px solid rgba($color-neutral-500, 0.4);
120
+ color: $color-ink-500;
121
+
122
+ p {
123
+ margin: 0;
124
+ }
125
+ }
126
+
127
+ .moderation-item__history {
128
+ margin: map.get($spacing, 2) 0;
129
+ padding-left: map.get($spacing, 5);
130
+ color: $color-ink-500;
131
+ font-size: map.get($font-size-scale, xs);
132
+ }
133
+
134
+ .moderation-item__actions {
135
+ display: grid;
136
+ gap: map.get($spacing, 2);
137
+ margin-top: map.get($spacing, 3);
138
+ padding-top: map.get($spacing, 3);
139
+ border-top: 1px solid rgba($color-neutral-500, 0.2);
140
+ }
141
+
142
+ .moderation-item__note-label {
143
+ font-weight: 600;
144
+ }
145
+
146
+ .moderation-item__note {
147
+ width: 100%;
148
+ padding: 0.4rem 0.6rem;
149
+ border: 1px solid rgba($color-neutral-200, 0.9);
150
+ border-radius: map.get($radius, sm);
151
+ background: $color-surface-50;
152
+ color: $color-ink-700;
153
+ font: inherit;
154
+ }
155
+
156
+ .moderation-item__buttons {
157
+ display: flex;
158
+ flex-wrap: wrap;
159
+ gap: map.get($spacing, 2);
160
+ }
161
+
162
+ .moderation-item__message {
163
+ margin: map.get($spacing, 2) 0 0;
164
+ font-weight: 600;
165
+
166
+ &[role='alert'] {
167
+ color: $color-danger-700;
168
+ }
169
+ }
170
+
171
+ body.dark-mode {
172
+ .moderation__boundary {
173
+ border-left-color: $dark-accent-secondary;
174
+ background: rgba($dark-ink-500, 0.12);
175
+ }
176
+
177
+ .moderation__status,
178
+ .moderation__sign-in {
179
+ background: rgba($dark-ink-500, 0.15);
180
+ }
181
+
182
+ .moderation[data-state='error'] .moderation__status,
183
+ .moderation[data-state='unauthorized'] .moderation__status,
184
+ .moderation[data-state='forbidden'] .moderation__status,
185
+ .moderation-item__message[role='alert'] {
186
+ color: $color-danger-300;
187
+ }
188
+
189
+ .moderation-item__card {
190
+ border-color: rgba($dark-ink-500, 0.35);
191
+ }
192
+
193
+ .moderation-item--correction .moderation-item__card {
194
+ border-left-color: $dark-accent-secondary;
195
+ }
196
+
197
+ .moderation-item--abuse .moderation-item__card {
198
+ border-left-color: $color-danger-300;
199
+ }
200
+
201
+ .moderation-item__type,
202
+ .moderation-item__status,
203
+ .moderation-item__category {
204
+ background: rgba($dark-ink-500, 0.2);
205
+ color: $dark-ink-700;
206
+ }
207
+
208
+ .moderation-item__time,
209
+ .moderation-item__author,
210
+ .moderation-item__where,
211
+ .moderation-item__context,
212
+ .moderation-item__quote,
213
+ .moderation-item__history {
214
+ color: $dark-ink-500;
215
+ }
216
+
217
+ .moderation-item__note {
218
+ border-color: rgba($dark-ink-500, 0.35);
219
+ background: $dark-surface-300;
220
+ color: $dark-ink-700;
221
+ }
222
+ }
@@ -440,7 +440,8 @@
440
440
  }
441
441
 
442
442
  &.is-active {
443
- color: var(--color-accent, #3277f6);
443
+ // On the tint below the plain accent reaches only 4.12:1.
444
+ color: var(--color-accent-text, #1d4ed8);
444
445
  background-color: rgba(50, 119, 246, 0.1);
445
446
  border-left-color: var(--color-accent, #3277f6);
446
447
  font-weight: 500;
@@ -453,7 +454,8 @@
453
454
  border-top: 1px solid var(--color-border, #e0e4ed);
454
455
  background-color: var(--color-background, #ffffff);
455
456
  font-size: 0.8125rem;
456
- color: var(--color-text-tertiary, #8995a8);
457
+ // The tertiary ink is for decoration: 2.41:1 in the light theme, 3.73:1 in the dark one.
458
+ color: var(--color-text-secondary, #6f6862);
457
459
  }
458
460
 
459
461
  &__reading-progress {
data/_sass/_print.scss ADDED
@@ -0,0 +1,299 @@
1
+ @use 'sass:map';
2
+
3
+ @use 'variables' as *;
4
+ @use 'mixins' as *;
5
+
6
+ // Reading mode and print (_includes/components/reading-mode-toggle.html).
7
+ //
8
+ // Reading mode hides the site's chrome and the panels around an article and
9
+ // leaves the article, its metadata and its table of contents. Print does the
10
+ // same on paper: black on white whatever the theme, the addresses of links,
11
+ // no interactive controls, and no figure, table, code block or equation cut
12
+ // across pages where the browser can help it.
13
+
14
+ // ---------------------------------------------------------------------------
15
+ // The control
16
+ // ---------------------------------------------------------------------------
17
+ .reading-mode-bar {
18
+ display: flex;
19
+ justify-content: flex-end;
20
+ }
21
+
22
+ // Shared by the reading-mode control and the reading-state buttons (_reading-state.scss).
23
+ .post-tool {
24
+ display: inline-flex;
25
+ align-items: center;
26
+ gap: map.get($spacing, 2);
27
+ padding: 0.35rem 0.75rem;
28
+ border: 1px solid rgba($color-neutral-200, 0.9);
29
+ border-radius: map.get($radius, md);
30
+ background: $color-surface-50;
31
+ color: $color-ink-700;
32
+ font: inherit;
33
+ font-size: map.get($font-size-scale, sm);
34
+ font-weight: 600;
35
+ cursor: pointer;
36
+
37
+ &:hover,
38
+ &:focus-visible {
39
+ border-color: $color-accent-primary;
40
+ color: $color-accent-primary-text;
41
+ }
42
+
43
+ &[aria-pressed='true'] {
44
+ border-color: $color-accent-primary;
45
+ background: $color-accent-primary;
46
+ color: #fff;
47
+ }
48
+
49
+ svg {
50
+ flex: none;
51
+ }
52
+ }
53
+
54
+ body.dark-mode .post-tool {
55
+ border-color: rgba($dark-ink-500, 0.35);
56
+ background: $dark-surface-300;
57
+ color: $dark-ink-700;
58
+
59
+ &:hover,
60
+ &:focus-visible {
61
+ border-color: $dark-accent-primary;
62
+ color: $dark-accent-primary;
63
+ }
64
+
65
+ &[aria-pressed='true'] {
66
+ border-color: $dark-accent-primary;
67
+ background: $dark-accent-primary;
68
+ color: $dark-surface-100;
69
+ }
70
+ }
71
+
72
+ // ---------------------------------------------------------------------------
73
+ // Reading mode: the article alone, and the way back
74
+ // ---------------------------------------------------------------------------
75
+ body.reading-mode {
76
+ .site-header,
77
+ .site-footer,
78
+ .breadcrumbs,
79
+ .social-share,
80
+ .post-interactive,
81
+ .post-comments,
82
+ .citation-tools,
83
+ .open-science-badges,
84
+ .author-bio,
85
+ .post-related,
86
+ .post-pagination {
87
+ display: none !important;
88
+ }
89
+
90
+ .site-main {
91
+ padding-top: map.get($spacing, 4);
92
+ }
93
+
94
+ // The tools stay in reach while the article scrolls.
95
+ .post-tools {
96
+ position: sticky;
97
+ top: map.get($spacing, 3);
98
+ z-index: 5;
99
+ }
100
+
101
+ .post-content {
102
+ font-size: 1.0625rem;
103
+ line-height: 1.7;
104
+ }
105
+ }
106
+
107
+ // ---------------------------------------------------------------------------
108
+ // Print
109
+ // ---------------------------------------------------------------------------
110
+ .print-only {
111
+ display: none;
112
+ }
113
+
114
+ @media print {
115
+ @page {
116
+ margin: 2cm;
117
+ }
118
+
119
+ body,
120
+ body.dark-mode {
121
+ background: #fff !important;
122
+ color: #000 !important;
123
+ font-size: 11pt;
124
+ }
125
+
126
+ // The chrome and the controls that only work on a screen
127
+ .site-header,
128
+ .site-footer,
129
+ .skip-link,
130
+ .breadcrumbs,
131
+ .social-share,
132
+ .post-interactive,
133
+ .post-comments,
134
+ .post-slides,
135
+ .open-science-badges,
136
+ .author-bio,
137
+ .post-related,
138
+ .post-pagination,
139
+ .post-tools,
140
+ .reading-mode-bar,
141
+ .code-copy,
142
+ .citation-tools__exports,
143
+ .viz-table-toggle,
144
+ .visually-hidden[aria-live],
145
+ .service-form__status,
146
+ .comments-thread__status,
147
+ .reading-data__status,
148
+ .moderation__status,
149
+ .reactions__status,
150
+ .subscription-manage__status,
151
+ .webmentions__status,
152
+ .enhanced-code-block__feedback {
153
+ display: none !important;
154
+ }
155
+
156
+ .print-only {
157
+ display: block !important;
158
+ }
159
+
160
+ .site-main {
161
+ max-width: none;
162
+ padding: 0;
163
+ }
164
+
165
+ .post-body-wrapper {
166
+ display: block;
167
+ }
168
+
169
+ // Black on white, whatever the theme
170
+ body.dark-mode :where(h1, h2, h3, h4, h5, h6, p, li, dt, dd, td, th, figcaption, blockquote, code, pre, span, a,
171
+ strong, em, time, small, summary, label, caption, kbd) {
172
+ color: #000 !important;
173
+ }
174
+
175
+ body.dark-mode :where(section, aside, div, nav, article, figure, p, li, ul, ol, dl, dt, dd, blockquote, pre, code,
176
+ table, th, td, kbd) {
177
+ background: transparent !important;
178
+ border-color: #999 !important;
179
+ }
180
+
181
+ blockquote {
182
+ background: none !important;
183
+ }
184
+
185
+ a {
186
+ color: #000 !important;
187
+ text-decoration: underline;
188
+ }
189
+
190
+ .datalog-statement,
191
+ .datalog-proof,
192
+ .revision-notice,
193
+ .series-nav,
194
+ .reproduce,
195
+ .content-provenance,
196
+ .content-license,
197
+ .citation-tools,
198
+ .enhanced-toc {
199
+ background: none !important;
200
+ border-color: #000;
201
+ box-shadow: none;
202
+ }
203
+
204
+ // Links keep their addresses, other than anchors within the page
205
+ .post-content a[href^='http']::after {
206
+ content: ' (' attr(href) ')';
207
+ font-size: 0.85em;
208
+ word-break: break-all;
209
+ }
210
+
211
+ // Page breaks
212
+ h1,
213
+ h2,
214
+ h3,
215
+ h4 {
216
+ break-after: avoid;
217
+ page-break-after: avoid;
218
+ }
219
+
220
+ p,
221
+ li {
222
+ orphans: 3;
223
+ widows: 3;
224
+ }
225
+
226
+ pre,
227
+ figure,
228
+ table,
229
+ tr,
230
+ blockquote,
231
+ img,
232
+ svg,
233
+ .code-block-wrapper,
234
+ .highlight,
235
+ .datalog-statement,
236
+ .datalog-proof,
237
+ mjx-container[display='true'],
238
+ .katex-display {
239
+ break-inside: avoid;
240
+ page-break-inside: avoid;
241
+ }
242
+
243
+ img,
244
+ svg,
245
+ mjx-container,
246
+ .katex-display {
247
+ max-width: 100% !important;
248
+ overflow: visible !important;
249
+ }
250
+
251
+ // Code without a dark background, wrapped to the page
252
+ pre,
253
+ pre.highlight,
254
+ .highlight pre,
255
+ pre[class*='language-'],
256
+ .code-block-wrapper {
257
+ background: #fff !important;
258
+ color: #000 !important;
259
+ border: 1px solid #999;
260
+ box-shadow: none;
261
+ }
262
+
263
+ pre {
264
+ white-space: pre-wrap !important;
265
+ word-break: break-word;
266
+ overflow: visible !important;
267
+ }
268
+
269
+ .rouge-gutter {
270
+ display: none !important;
271
+ }
272
+
273
+ body.dark-mode .highlight span {
274
+ color: #000 !important;
275
+ background: none !important;
276
+ }
277
+
278
+ // Interactive embeds become a note; a visualization's table fallback is shown
279
+ iframe,
280
+ canvas,
281
+ video,
282
+ [data-viz-type] > *:not(.viz-table-container),
283
+ .interactive-embed > *:not(.viz-table-container) {
284
+ display: none !important;
285
+ }
286
+
287
+ [data-viz-type]::before,
288
+ .interactive-embed::before {
289
+ content: 'Interactive content, available in the online article.';
290
+ display: block;
291
+ padding: map.get($spacing, 3);
292
+ border: 1px dashed #999;
293
+ font-style: italic;
294
+ }
295
+
296
+ .viz-table-wrapper[hidden] {
297
+ display: block !important;
298
+ }
299
+ }
@@ -0,0 +1,89 @@
1
+ @use 'sass:map';
2
+
3
+ @use 'variables' as *;
4
+
5
+ // "Was this useful?" (components/reactions.html, assets/js/reactions/widget.js):
6
+ // a quiet strip after the article, not a competitor to it.
7
+
8
+ .reactions {
9
+ max-width: $max-width-reading;
10
+ margin-top: map.get($spacing, 5);
11
+ padding-top: map.get($spacing, 3);
12
+ border-top: 1px solid rgba($color-neutral-500, 0.25);
13
+ font-size: map.get($font-size-scale, sm);
14
+ }
15
+
16
+ .reactions__prompt {
17
+ margin: 0 0 map.get($spacing, 2);
18
+ font-weight: 600;
19
+ color: $color-ink-700;
20
+ }
21
+
22
+ .reactions__choices {
23
+ display: flex;
24
+ flex-wrap: wrap;
25
+ gap: map.get($spacing, 2);
26
+ }
27
+
28
+ .reactions__choice {
29
+ display: inline-flex;
30
+ align-items: baseline;
31
+ gap: map.get($spacing, 1);
32
+
33
+ &[aria-pressed='true'] {
34
+ background: $color-accent-primary;
35
+ border-color: $color-accent-primary;
36
+ color: $color-surface-50;
37
+ }
38
+ }
39
+
40
+ // The count inherits the button's colour at full strength: dimmed, it fell
41
+ // below 4.5:1 on the pressed button.
42
+ .reactions__count {
43
+ font-variant-numeric: tabular-nums;
44
+
45
+ &::before {
46
+ content: '·';
47
+ margin-right: map.get($spacing, 1);
48
+ }
49
+ }
50
+
51
+ .reactions__status {
52
+ margin: map.get($spacing, 2) 0 0;
53
+ color: $color-ink-500;
54
+
55
+ .reactions[data-state='disabled'] & {
56
+ color: $color-ink-500;
57
+ }
58
+ }
59
+
60
+ // A missing service leaves the strip usable but without counts; nothing else changes.
61
+ .reactions[data-state='disabled'] .reactions__choices {
62
+ opacity: 0.6;
63
+ }
64
+
65
+ body.dark-mode {
66
+ .reactions {
67
+ border-top-color: rgba($dark-ink-500, 0.35);
68
+ }
69
+
70
+ .reactions__prompt {
71
+ color: $dark-ink-700;
72
+ }
73
+
74
+ .reactions__status {
75
+ color: $dark-ink-500;
76
+ }
77
+
78
+ .reactions__choice[aria-pressed='true'] {
79
+ background: $dark-accent-primary;
80
+ border-color: $dark-accent-primary;
81
+ color: $dark-surface-100;
82
+ }
83
+ }
84
+
85
+ @media print {
86
+ .reactions {
87
+ display: none !important;
88
+ }
89
+ }