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,290 @@
1
+ @use 'sass:map';
2
+
3
+ @use 'variables' as *;
4
+ @use 'mixins' as *;
5
+
6
+ // Local reading state (assets/js/reading-state): the tools bar above a post,
7
+ // the resume prompt, the toolbar over a selection, the highlights and the
8
+ // panel of private notes, and the list of saved articles on a page. The
9
+ // buttons share .post-tool with the reading-mode control (_print.scss).
10
+
11
+ .post-tools {
12
+ display: flex;
13
+ flex-wrap: wrap;
14
+ align-items: center;
15
+ justify-content: flex-end;
16
+ gap: map.get($spacing, 2);
17
+ }
18
+
19
+ .post-tool--link {
20
+ text-decoration: none;
21
+ }
22
+
23
+ .bookmark-toggle[aria-pressed='true'] svg {
24
+ fill: currentColor;
25
+ }
26
+
27
+ // display: flex would override the `hidden` attribute's display: none.
28
+ .reading-resume[hidden],
29
+ .reading-toolbar[hidden] {
30
+ display: none;
31
+ }
32
+
33
+ // The resume prompt
34
+ .reading-resume {
35
+ @include callout($color-accent-secondary);
36
+ display: flex;
37
+ flex-wrap: wrap;
38
+ align-items: center;
39
+ justify-content: space-between;
40
+ gap: map.get($spacing, 2) map.get($spacing, 4);
41
+ margin-top: map.get($spacing, 4);
42
+ font-size: map.get($font-size-scale, sm);
43
+ max-width: $max-width-reading;
44
+
45
+ p {
46
+ margin: 0;
47
+ }
48
+ }
49
+
50
+ .reading-resume__actions {
51
+ display: flex;
52
+ gap: map.get($spacing, 2);
53
+ }
54
+
55
+ // The toolbar over a selection
56
+ .reading-toolbar {
57
+ position: absolute;
58
+ z-index: 20;
59
+ display: flex;
60
+ gap: 2px;
61
+ padding: 4px;
62
+ border-radius: map.get($radius, md);
63
+ background: $color-ink-900;
64
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.25);
65
+
66
+ button {
67
+ padding: 0.35rem 0.6rem;
68
+ border: 0;
69
+ border-radius: map.get($radius, sm);
70
+ background: transparent;
71
+ color: #fff;
72
+ font: inherit;
73
+ font-size: map.get($font-size-scale, sm);
74
+ cursor: pointer;
75
+
76
+ &:hover,
77
+ &:focus-visible {
78
+ background: rgba(255, 255, 255, 0.18);
79
+ }
80
+ }
81
+ }
82
+
83
+ // The highlights themselves: the Custom Highlight API where the browser has
84
+ // it, marks elsewhere.
85
+ ::highlight(datalog-annotation) {
86
+ background-color: rgba(250, 204, 21, 0.45);
87
+ color: inherit;
88
+ }
89
+
90
+ mark.reading-highlight {
91
+ background-color: rgba(250, 204, 21, 0.45);
92
+ color: inherit;
93
+ }
94
+
95
+ body.dark-mode ::highlight(datalog-annotation),
96
+ body.dark-mode mark.reading-highlight {
97
+ background-color: rgba(250, 204, 21, 0.3);
98
+ }
99
+
100
+ // The panel of private highlights and the data controls
101
+ .reading-notes {
102
+ @include callout($color-accent-tertiary);
103
+ margin-top: map.get($spacing, 5);
104
+ font-size: map.get($font-size-scale, sm);
105
+ max-width: $max-width-reading;
106
+
107
+ a {
108
+ color: $color-accent-primary-text;
109
+ }
110
+ }
111
+
112
+ .reading-notes__heading {
113
+ margin: 0 0 map.get($spacing, 1);
114
+ font-size: map.get($font-size-scale, base);
115
+ }
116
+
117
+ .reading-notes__intro,
118
+ .reading-notes__empty,
119
+ .reading-notes__unavailable,
120
+ .reading-list__empty {
121
+ margin: 0 0 map.get($spacing, 3);
122
+ color: $color-ink-500;
123
+ }
124
+
125
+ .reading-notes__list {
126
+ display: grid;
127
+ gap: map.get($spacing, 3);
128
+ margin: 0 0 map.get($spacing, 3);
129
+ padding: 0;
130
+ list-style: none;
131
+ }
132
+
133
+ .reading-note {
134
+ padding-top: map.get($spacing, 2);
135
+ border-top: 1px solid rgba($color-neutral-200, 0.7);
136
+ }
137
+
138
+ .reading-note__quote {
139
+ margin: 0 0 map.get($spacing, 1);
140
+ padding: 0 0 0 map.get($spacing, 3);
141
+ border-left: 3px solid rgba(250, 204, 21, 0.9);
142
+ background: none;
143
+ font-style: italic;
144
+ }
145
+
146
+ .reading-note__meta {
147
+ margin: 0 0 map.get($spacing, 1);
148
+ font-size: map.get($font-size-scale, xs);
149
+ color: $color-ink-500;
150
+ }
151
+
152
+ .reading-note__lost {
153
+ font-weight: 600;
154
+ color: $color-warning-text;
155
+ }
156
+
157
+ .reading-note__label {
158
+ display: grid;
159
+ gap: 2px;
160
+
161
+ span {
162
+ font-size: map.get($font-size-scale, xs);
163
+ font-weight: 600;
164
+ text-transform: uppercase;
165
+ letter-spacing: 0.04em;
166
+ color: $color-ink-500;
167
+ }
168
+
169
+ textarea {
170
+ width: 100%;
171
+ padding: 0.35rem 0.5rem;
172
+ border: 1px solid rgba($color-neutral-200, 0.9);
173
+ border-radius: map.get($radius, sm);
174
+ background: $color-surface-50;
175
+ color: $color-ink-700;
176
+ font: inherit;
177
+ font-size: map.get($font-size-scale, sm);
178
+ }
179
+ }
180
+
181
+ .reading-note__actions,
182
+ .reading-data__actions {
183
+ display: flex;
184
+ flex-wrap: wrap;
185
+ gap: map.get($spacing, 2);
186
+ margin-top: map.get($spacing, 2);
187
+ }
188
+
189
+ .reading-data {
190
+ margin-top: map.get($spacing, 3);
191
+
192
+ summary {
193
+ cursor: pointer;
194
+ font-weight: 600;
195
+ }
196
+ }
197
+
198
+ .reading-data__import {
199
+ position: relative;
200
+ overflow: hidden;
201
+
202
+ input {
203
+ position: absolute;
204
+ inset: 0;
205
+ width: 100%;
206
+ opacity: 0;
207
+ cursor: pointer;
208
+ }
209
+ }
210
+
211
+ .reading-data__status {
212
+ margin: map.get($spacing, 2) 0 0;
213
+ color: $color-ink-500;
214
+ }
215
+
216
+ // The saved articles on a page
217
+ .reading-list__items {
218
+ display: grid;
219
+ gap: map.get($spacing, 3);
220
+ margin: 0 0 map.get($spacing, 4);
221
+ padding: 0;
222
+ list-style: none;
223
+ }
224
+
225
+ .reading-list__item {
226
+ display: flex;
227
+ flex-wrap: wrap;
228
+ align-items: baseline;
229
+ gap: map.get($spacing, 1) map.get($spacing, 3);
230
+
231
+ a {
232
+ font-weight: 600;
233
+ }
234
+ }
235
+
236
+ .reading-list__meta {
237
+ font-size: map.get($font-size-scale, sm);
238
+ color: $color-ink-500;
239
+ }
240
+
241
+ body.dark-mode {
242
+ .reading-resume {
243
+ border-left-color: $dark-accent-secondary;
244
+ }
245
+
246
+ .reading-notes {
247
+ border-left-color: $dark-accent-tertiary;
248
+ }
249
+
250
+ .reading-notes__intro,
251
+ .reading-notes__empty,
252
+ .reading-notes__unavailable,
253
+ .reading-list__empty,
254
+ .reading-note__meta,
255
+ .reading-note__label span,
256
+ .reading-data__status,
257
+ .reading-list__meta {
258
+ color: $dark-ink-500;
259
+ }
260
+
261
+ .reading-note {
262
+ border-top-color: rgba($dark-ink-500, 0.25);
263
+ }
264
+
265
+ .reading-note__lost {
266
+ color: $dark-warning;
267
+ }
268
+
269
+ .reading-note__label textarea {
270
+ border-color: rgba($dark-ink-500, 0.35);
271
+ background: $dark-surface-300;
272
+ color: $dark-ink-700;
273
+ }
274
+ }
275
+
276
+ @media print {
277
+ .reading-resume,
278
+ .reading-toolbar,
279
+ .reading-note__actions,
280
+ .reading-data,
281
+ .reading-notes__empty,
282
+ .reading-notes__unavailable {
283
+ display: none !important;
284
+ }
285
+
286
+ .reading-notes {
287
+ border-left-color: currentColor;
288
+ background: none;
289
+ }
290
+ }
@@ -0,0 +1,204 @@
1
+ @use 'sass:map';
2
+
3
+ @use 'variables' as *;
4
+ @use 'mixins' as *;
5
+
6
+ // The forms that post to the site's dynamic services (docs/dynamic-services.md):
7
+ // the correction report on posts and the contact form. Their states come from
8
+ // assets/js/dynamic-services/form-state.js as data-state on the form.
9
+
10
+ .correction-report {
11
+ @include callout($color-accent-secondary);
12
+ margin-top: map.get($spacing, 5);
13
+ font-size: map.get($font-size-scale, sm);
14
+ max-width: $max-width-reading;
15
+ }
16
+
17
+ .correction-report__summary {
18
+ cursor: pointer;
19
+ font-weight: 600;
20
+ color: $color-ink-900;
21
+ }
22
+
23
+ .contact-form {
24
+ margin-top: map.get($spacing, 5);
25
+ max-width: $max-width-reading;
26
+ }
27
+
28
+ .contact-form__fallback {
29
+ margin: 0;
30
+ padding: map.get($spacing, 3) map.get($spacing, 4);
31
+ border-radius: map.get($radius, sm);
32
+ background: rgba($color-neutral-500, 0.08);
33
+ }
34
+
35
+ .service-form {
36
+ margin-top: map.get($spacing, 3);
37
+ }
38
+
39
+ .service-form__intro,
40
+ .service-form__hint {
41
+ margin: 0 0 map.get($spacing, 2);
42
+ color: $color-ink-500;
43
+ }
44
+
45
+ .service-form__hint {
46
+ margin: map.get($spacing, 1) 0 0;
47
+ font-size: map.get($font-size-scale, xs);
48
+ }
49
+
50
+ .service-form__quote {
51
+ margin: 0 0 map.get($spacing, 3);
52
+ padding: 0 0 0 map.get($spacing, 3);
53
+ border-left: 3px solid rgba($color-neutral-500, 0.5);
54
+ font-style: italic;
55
+ }
56
+
57
+ .service-form__fields {
58
+ display: grid;
59
+ gap: map.get($spacing, 3);
60
+ margin: 0 0 map.get($spacing, 3);
61
+ padding: 0;
62
+ border: 0;
63
+ min-width: 0;
64
+ }
65
+
66
+ .service-form__row {
67
+ display: grid;
68
+ gap: map.get($spacing, 3);
69
+
70
+ @include respond-to(md) {
71
+ grid-template-columns: 1fr 1fr;
72
+ }
73
+ }
74
+
75
+ .service-form__privacy {
76
+ margin: 0 0 map.get($spacing, 3);
77
+ font-size: map.get($font-size-scale, xs);
78
+ color: $color-ink-500;
79
+
80
+ a {
81
+ text-decoration: underline;
82
+ }
83
+ }
84
+
85
+ .service-form__field {
86
+ display: grid;
87
+ gap: map.get($spacing, 1);
88
+
89
+ label {
90
+ font-weight: 600;
91
+ }
92
+
93
+ input,
94
+ select,
95
+ textarea {
96
+ width: 100%;
97
+ padding: 0.45rem 0.6rem;
98
+ border: 1px solid rgba($color-neutral-200, 0.9);
99
+ border-radius: map.get($radius, sm);
100
+ background: $color-surface-50;
101
+ color: $color-ink-700;
102
+ font: inherit;
103
+ font-size: map.get($font-size-scale, sm);
104
+ }
105
+
106
+ [aria-invalid='true'] {
107
+ border-color: $color-danger-600;
108
+ }
109
+ }
110
+
111
+ .service-form__error {
112
+ margin: 0;
113
+ font-size: map.get($font-size-scale, xs);
114
+ font-weight: 600;
115
+ color: $color-danger-700;
116
+ }
117
+
118
+ // The honeypot: readers never see it, bots fill it.
119
+ .service-form__trap {
120
+ position: absolute;
121
+ left: -10000px;
122
+ width: 1px;
123
+ height: 1px;
124
+ overflow: hidden;
125
+ }
126
+
127
+ .service-form__actions {
128
+ display: flex;
129
+ flex-wrap: wrap;
130
+ gap: map.get($spacing, 2);
131
+ }
132
+
133
+ .service-form__status {
134
+ margin: map.get($spacing, 3) 0 0;
135
+ padding: map.get($spacing, 2) map.get($spacing, 3);
136
+ border-radius: map.get($radius, sm);
137
+ background: rgba($color-neutral-500, 0.1);
138
+ color: $color-ink-700;
139
+
140
+ form[data-state='success'] & {
141
+ background: rgba($color-success, 0.12);
142
+ }
143
+
144
+ form[data-state='error'] &,
145
+ form[data-state='invalid'] & {
146
+ background: rgba($color-danger-500, 0.1);
147
+ color: $color-danger-700;
148
+ }
149
+ }
150
+
151
+ form[data-state='pending'] .service-form__actions {
152
+ opacity: 0.7;
153
+ }
154
+
155
+ form[data-state='disabled'] .service-form__fields {
156
+ opacity: 0.6;
157
+ }
158
+
159
+ body.dark-mode {
160
+ .correction-report {
161
+ border-left-color: $dark-accent-secondary;
162
+ }
163
+
164
+ .correction-report__summary {
165
+ color: $dark-ink-900;
166
+ }
167
+
168
+ .service-form__intro,
169
+ .service-form__hint,
170
+ .service-form__privacy {
171
+ color: $dark-ink-500;
172
+ }
173
+
174
+ .contact-form__fallback {
175
+ background: rgba($dark-ink-500, 0.15);
176
+ }
177
+
178
+ .service-form__field {
179
+ input,
180
+ select,
181
+ textarea {
182
+ border-color: rgba($dark-ink-500, 0.35);
183
+ background: $dark-surface-300;
184
+ color: $dark-ink-700;
185
+ }
186
+ }
187
+
188
+ .service-form__error,
189
+ form[data-state='error'] .service-form__status,
190
+ form[data-state='invalid'] .service-form__status {
191
+ color: $color-danger-300;
192
+ }
193
+
194
+ .service-form__status {
195
+ background: rgba($dark-ink-500, 0.15);
196
+ color: $dark-ink-700;
197
+ }
198
+ }
199
+
200
+ @media print {
201
+ .correction-report {
202
+ display: none !important;
203
+ }
204
+ }
@@ -0,0 +1,140 @@
1
+ @use 'sass:map';
2
+
3
+ @use 'variables' as *;
4
+
5
+ // Newsletter subscriptions (components/subscribe-form.html and
6
+ // subscription-manage.html). The forms are .service-form (_service-forms.scss).
7
+
8
+ .subscribe {
9
+ max-width: $max-width-reading;
10
+ margin-top: map.get($spacing, 6);
11
+ }
12
+
13
+ .subscribe__heading {
14
+ margin: 0 0 map.get($spacing, 2);
15
+ font-size: map.get($font-size-scale, lg);
16
+ }
17
+
18
+ .subscribe__description {
19
+ margin: 0 0 map.get($spacing, 3);
20
+ font-size: map.get($font-size-scale, sm);
21
+ }
22
+
23
+ // In the footer the form sits in a column next to the feeds: smaller, no top gap.
24
+ .subscribe--footer {
25
+ max-width: none;
26
+ margin-top: map.get($spacing, 4);
27
+
28
+ .subscribe__heading {
29
+ font-size: map.get($font-size-scale, md);
30
+ }
31
+ }
32
+
33
+ // The footer is dark in both themes, so the form's inks are the footer's.
34
+ .site-footer .subscribe {
35
+ .subscribe__heading {
36
+ color: #fff;
37
+ }
38
+
39
+ .service-form__privacy,
40
+ .service-form__hint {
41
+ color: rgba(#fff, 0.75);
42
+ }
43
+
44
+ .service-form__privacy a {
45
+ color: #fff;
46
+ }
47
+
48
+ .service-form__error,
49
+ form[data-state='error'] .service-form__status,
50
+ form[data-state='invalid'] .service-form__status {
51
+ color: $color-danger-300;
52
+ }
53
+
54
+ .service-form__status {
55
+ background: rgba(#fff, 0.1);
56
+ color: #fff;
57
+ }
58
+ }
59
+
60
+ .subscribe__topics {
61
+ display: flex;
62
+ flex-wrap: wrap;
63
+ gap: map.get($spacing, 1) map.get($spacing, 4);
64
+ margin: 0;
65
+ padding: 0;
66
+ border: 0;
67
+ min-width: 0;
68
+ font-size: map.get($font-size-scale, sm);
69
+
70
+ legend {
71
+ width: 100%;
72
+ margin-bottom: map.get($spacing, 1);
73
+ padding: 0;
74
+ font-weight: 600;
75
+ }
76
+
77
+ .service-form__error {
78
+ width: 100%;
79
+ }
80
+ }
81
+
82
+ .subscribe__topic {
83
+ display: inline-flex;
84
+ align-items: center;
85
+ gap: map.get($spacing, 2);
86
+ font-weight: 400;
87
+
88
+ input {
89
+ width: auto;
90
+ }
91
+ }
92
+
93
+ .subscription-manage {
94
+ max-width: $max-width-reading;
95
+ margin-top: map.get($spacing, 5);
96
+ }
97
+
98
+ .subscription-manage__status {
99
+ margin: 0 0 map.get($spacing, 3);
100
+ padding: map.get($spacing, 2) map.get($spacing, 3);
101
+ border-radius: map.get($radius, sm);
102
+ background: rgba($color-neutral-500, 0.1);
103
+
104
+ .subscription-manage[data-state='error'] & {
105
+ background: rgba($color-danger-500, 0.1);
106
+ color: $color-danger-700;
107
+ }
108
+
109
+ .subscription-manage[data-state='confirmed'] &,
110
+ .subscription-manage[data-state='saved'] & {
111
+ background: rgba($color-success, 0.12);
112
+ }
113
+ }
114
+
115
+ .subscription-manage__panel {
116
+ display: grid;
117
+ gap: map.get($spacing, 3);
118
+ justify-items: start;
119
+ }
120
+
121
+ // display: grid would override the hidden attribute.
122
+ .subscription-manage__panel[hidden] {
123
+ display: none;
124
+ }
125
+
126
+ body.dark-mode {
127
+ .subscription-manage__status {
128
+ background: rgba($dark-ink-500, 0.15);
129
+ }
130
+
131
+ .subscription-manage[data-state='error'] .subscription-manage__status {
132
+ color: $color-danger-300;
133
+ }
134
+ }
135
+
136
+ @media print {
137
+ .subscribe {
138
+ display: none !important;
139
+ }
140
+ }
@@ -80,7 +80,7 @@ pre.highlight {
80
80
  .nb,
81
81
  .bp,
82
82
  .gi {
83
- color: $color-success;
83
+ color: $color-success-text;
84
84
  }
85
85
 
86
86
  .o,
@@ -117,7 +117,7 @@ pre.highlight {
117
117
  .sr,
118
118
  .gr,
119
119
  .gt {
120
- color: $color-warning;
120
+ color: $color-warning-text;
121
121
  }
122
122
 
123
123
  .gh,
@@ -158,7 +158,7 @@ pre.highlight {
158
158
  overflow: visible;
159
159
  }
160
160
 
161
- .highlight .rouge-gutter {
161
+ .highlight .rouge-table td.rouge-gutter {
162
162
  padding-right: map.get($spacing, 4);
163
163
  color: $color-ink-500;
164
164
  text-align: right;
data/_sass/_theme.scss CHANGED
@@ -34,6 +34,15 @@
34
34
  @if features.$packages {
35
35
  @include meta.load-css('package-docs');
36
36
  }
37
+ @include meta.load-css('reading-state');
38
+ @include meta.load-css('service-forms');
39
+ @include meta.load-css('comments-thread');
40
+ @include meta.load-css('reactions');
41
+ @include meta.load-css('webmentions');
42
+ @include meta.load-css('subscriptions');
43
+ @include meta.load-css('moderation');
44
+ // Reading mode and print come last, so their rules win.
45
+ @include meta.load-css('print');
37
46
 
38
47
  // 2) CSS rules AFTER the partials
39
48
  :root {
@@ -52,6 +61,7 @@
52
61
 
53
62
  // Accent colors
54
63
  --color-accent: #{$color-accent-primary};
64
+ --color-accent-text: #{$color-accent-primary-text};
55
65
  --color-accent-secondary: #{$color-accent-secondary};
56
66
  --color-accent-dark: #{color.adjust($color-accent-primary, $lightness: -10%)};
57
67
 
@@ -90,6 +100,7 @@ body.dark-mode {
90
100
 
91
101
  // Accent colors
92
102
  --color-accent: #{$dark-accent-primary};
103
+ --color-accent-text: #{$dark-accent-primary};
93
104
  --color-accent-secondary: #{$dark-accent-secondary};
94
105
  --color-accent-dark: #{color.adjust($dark-accent-primary, $lightness: -10%)};
95
106