datalog-theme 0.8.0 → 0.9.0

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