datalog-theme 0.7.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 (203) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +188 -0
  3. data/CITATION.cff +2 -2
  4. data/README.md +25 -17
  5. data/_data/cdn-integrity.yml +0 -30
  6. data/_data/i18n/en.yml +297 -0
  7. data/_data/i18n/es.yml +297 -0
  8. data/_data/i18n/pt.yml +297 -0
  9. data/_data/js_manifest.json +16 -0
  10. data/_includes/analytics/dashboard.html +3 -1
  11. data/_includes/components/api-function.html +20 -1
  12. data/_includes/components/author-bio.html +21 -11
  13. data/_includes/components/author-list.html +32 -0
  14. data/_includes/components/citation-tools.html +33 -25
  15. data/_includes/components/comments-thread.html +90 -0
  16. data/_includes/components/contact-form.html +120 -0
  17. data/_includes/components/correction-report.html +82 -0
  18. data/_includes/components/enhanced-code-block.html +1 -1
  19. data/_includes/components/enhanced-toc.html +6 -7
  20. data/_includes/components/license-link.html +13 -0
  21. data/_includes/components/license-notice.html +28 -0
  22. data/_includes/components/moderation-inbox.html +139 -0
  23. data/_includes/components/reactions.html +49 -0
  24. data/_includes/components/reading-list.html +31 -0
  25. data/_includes/components/reading-mode-toggle.html +65 -0
  26. data/_includes/components/reading-state-bookmark.html +27 -0
  27. data/_includes/components/reading-state-panel.html +71 -0
  28. data/_includes/components/reproducibility.html +61 -0
  29. data/_includes/components/responsive-image.html +3 -3
  30. data/_includes/components/revision-history.html +39 -0
  31. data/_includes/components/revision-notice.html +35 -0
  32. data/_includes/components/series-nav.html +64 -0
  33. data/_includes/components/subscribe-form.html +88 -0
  34. data/_includes/components/subscription-manage.html +68 -0
  35. data/_includes/components/webmentions.html +48 -0
  36. data/_includes/csp-meta.html +135 -11
  37. data/_includes/footer.html +22 -20
  38. data/_includes/head.html +111 -63
  39. data/_includes/header/navigation.html +12 -15
  40. data/_includes/header.html +28 -19
  41. data/_includes/layouts/default/article.html +9 -7
  42. data/_includes/meta/dynamic-services-config.html +14 -0
  43. data/_includes/meta/math-config.html +18 -10
  44. data/_includes/meta/person-json.html +27 -0
  45. data/_includes/meta/publisher.html +45 -0
  46. data/_includes/meta/schema.html +67 -30
  47. data/_includes/meta/scholarly.html +121 -0
  48. data/_includes/meta/scripts-loader.html +18 -32
  49. data/_includes/meta/webmention-discovery.html +14 -0
  50. data/_includes/post/related-posts.html +4 -7
  51. data/_includes/scripts.html +57 -0
  52. data/_includes/search/index-data.json +9 -34
  53. data/_layouts/dataset.html +5 -3
  54. data/_layouts/default.html +16 -8
  55. data/_layouts/notebook.html +1 -0
  56. data/_layouts/package.html +4 -2
  57. data/_layouts/page.html +15 -0
  58. data/_layouts/portfolio.html +1 -0
  59. data/_layouts/post.html +102 -23
  60. data/_layouts/project.html +4 -3
  61. data/_layouts/research.html +20 -8
  62. data/_plugins/analytics_dashboard.rb +9 -3
  63. data/_plugins/authors.rb +133 -0
  64. data/_plugins/config_validator.rb +231 -23
  65. data/_plugins/critical_css_check.rb +42 -0
  66. data/_plugins/csp_generator.rb +18 -28
  67. data/_plugins/datalog_bibliography.rb +9 -7
  68. data/_plugins/datalog_comments.rb +8 -5
  69. data/_plugins/datalog_slides.rb +9 -8
  70. data/_plugins/i18n.rb +13 -12
  71. data/_plugins/image_optimizer.rb +241 -178
  72. data/_plugins/licenses.rb +135 -0
  73. data/_plugins/math_preprocessor.rb +59 -7
  74. data/_plugins/notebook_converter.rb +23 -4
  75. data/_plugins/plugin_loader.rb +3 -1
  76. data/_plugins/publications_generator.rb +8 -2
  77. data/_plugins/references.rb +238 -0
  78. data/_plugins/reproducibility.rb +150 -0
  79. data/_plugins/revisions.rb +101 -0
  80. data/_plugins/rouge_highlight_filter.rb +42 -0
  81. data/_plugins/scholarly.rb +50 -0
  82. data/_plugins/search_code_blocks.rb +30 -0
  83. data/_plugins/search_normalizer.rb +15 -53
  84. data/_plugins/search_pages.rb +3 -4
  85. data/_plugins/series.rb +104 -0
  86. data/_plugins/statements.rb +87 -0
  87. data/_sass/_academic-dashboard.scss +262 -0
  88. data/_sass/_base.scss +20 -1
  89. data/_sass/_comments-thread.scss +159 -0
  90. data/_sass/_components.scss +64 -1153
  91. data/_sass/_features.scss +17 -0
  92. data/_sass/_layout.scss +385 -1
  93. data/_sass/_mathematical.scss +27 -0
  94. data/_sass/_moderation.scss +222 -0
  95. data/_sass/_notebooks.scss +322 -0
  96. data/_sass/_open-science-badges.scss +56 -0
  97. data/_sass/{_phase1-enhancements.scss → _post-components.scss} +5 -3
  98. data/_sass/_print.scss +291 -0
  99. data/_sass/_reactions.scss +89 -0
  100. data/_sass/_reading-state.scss +290 -0
  101. data/_sass/_search-page.scss +530 -0
  102. data/_sass/_search.scss +46 -0
  103. data/_sass/_service-forms.scss +204 -0
  104. data/_sass/_subscriptions.scss +140 -0
  105. data/_sass/_syntax-highlighting.scss +212 -97
  106. data/_sass/_theme.scss +40 -19
  107. data/_sass/_typography.scss +130 -0
  108. data/_sass/_utilities.scss +5 -0
  109. data/_sass/_variables.scss +6 -0
  110. data/_sass/_webmentions.scss +125 -0
  111. data/assets/css/main.scss +14 -0
  112. data/assets/js/dist/academic.js +1 -1
  113. data/assets/js/dist/analytics-dashboard.js +1 -1
  114. data/assets/js/dist/chunks/chunk-2DYDWUFX.js +1 -0
  115. data/assets/js/dist/chunks/chunk-PATLC23F.js +1 -0
  116. data/assets/js/dist/chunks/chunk-V7734B2G.js +1 -0
  117. data/assets/js/dist/comments.js +2 -0
  118. data/assets/js/dist/contact.js +1 -0
  119. data/assets/js/dist/core.js +1 -1
  120. data/assets/js/dist/corrections.js +1 -0
  121. data/assets/js/dist/loader.js +1 -1
  122. data/assets/js/dist/math.js +1 -1
  123. data/assets/js/dist/moderation.js +1 -0
  124. data/assets/js/dist/notebook.js +1 -1
  125. data/assets/js/dist/reactions.js +1 -0
  126. data/assets/js/dist/reading-state.js +1 -0
  127. data/assets/js/dist/search.js +1 -1
  128. data/assets/js/dist/sources.json +52 -0
  129. data/assets/js/dist/subscriptions.js +1 -0
  130. data/assets/js/dist/visualizations.js +11 -2
  131. data/assets/js/dist/webmentions.js +1 -0
  132. data/assets/js/loader.js +37 -1
  133. data/datalog-theme.gemspec +35 -23
  134. data/lib/datalog/cli.rb +43 -15
  135. data/lib/datalog/critical_css.rb +168 -0
  136. data/lib/datalog/plugin_system/dependency_resolver.rb +0 -2
  137. data/lib/datalog/plugins/comments.rb +33 -3
  138. data/lib/datalog/theme/installed_files.rb +113 -0
  139. data/lib/datalog/theme/package.rb +57 -0
  140. data/lib/datalog/theme/repository_checkout.rb +94 -0
  141. data/lib/datalog/theme/version.rb +5 -1
  142. data/lib/datalog/warning_filter.rb +5 -11
  143. data/lib/datalog-theme.rb +6 -0
  144. metadata +96 -147
  145. data/_data/academic.yml +0 -217
  146. data/_data/config/author.yml +0 -121
  147. data/_data/datasets.yml +0 -28
  148. data/_data/js_meta.json +0 -371
  149. data/_data/navigation.yml +0 -145
  150. data/_data/projects.yml +0 -41
  151. data/_data/publications.yml +0 -28
  152. data/_data/social.yml +0 -73
  153. data/_data/visualizations.yml +0 -51
  154. data/_includes/components/advanced-search.html +0 -682
  155. data/_includes/components/bookmark-system.html +0 -96
  156. data/_includes/components/comments.html +0 -244
  157. data/_includes/components/content-recommendations.html +0 -228
  158. data/_includes/components/email-preferences.html +0 -200
  159. data/_includes/components/enhanced-metadata.html +0 -228
  160. data/_includes/components/language-switcher.html +0 -396
  161. data/_includes/components/navigation-enhancements.html +0 -454
  162. data/_includes/components/newsletter-signup.html +0 -178
  163. data/_includes/components/popular-posts.html +0 -233
  164. data/_includes/components/reading-progress.html +0 -133
  165. data/_includes/components/reading-time.html +0 -121
  166. data/_includes/components/series-navigation.html +0 -124
  167. data/_includes/components/social-proof.html +0 -34
  168. data/_includes/components/user-preferences.html +0 -566
  169. data/_includes/meta/syntax-config.html +0 -19
  170. data/_layouts/archive.html +0 -282
  171. data/_layouts/post-sidebar.html +0 -183
  172. data/_sass/_phase3-enhancements.scss +0 -874
  173. data/_sass/_phase4-enhancements.scss +0 -1214
  174. data/_sass/_phase5-enhancements.scss +0 -414
  175. data/assets/js/academic.js +0 -262
  176. data/assets/js/analytics-dashboard.js +0 -382
  177. data/assets/js/core/dark-mode.js +0 -79
  178. data/assets/js/core/github-cards.js +0 -123
  179. data/assets/js/core/language-filter.js +0 -69
  180. data/assets/js/core/navigation.js +0 -184
  181. data/assets/js/core/scroll-progress.js +0 -45
  182. data/assets/js/core/search-hotkeys.js +0 -62
  183. data/assets/js/core/skip-links.js +0 -62
  184. data/assets/js/dist/manifest.json +0 -22
  185. data/assets/js/dist/meta.json +0 -371
  186. data/assets/js/main.js +0 -23
  187. data/assets/js/math.js +0 -818
  188. data/assets/js/notebook.js +0 -158
  189. data/assets/js/search/analytics.js +0 -91
  190. data/assets/js/search/app.js +0 -271
  191. data/assets/js/search/autocomplete.js +0 -120
  192. data/assets/js/search/engine.js +0 -260
  193. data/assets/js/search/filters.js +0 -45
  194. data/assets/js/search/render.js +0 -217
  195. data/assets/js/search/utils.js +0 -99
  196. data/assets/js/search.js +0 -354
  197. data/assets/js/visualizations.js +0 -816
  198. data/assets/publications/datalog-publications.bib +0 -8
  199. data/assets/publications/datalog-publications.ris +0 -9
  200. data/assets/publications/publications.bib +0 -30
  201. data/assets/templates/diogo-ribeiro-cv.md +0 -31
  202. data/assets/templates/diogo-ribeiro-cv.tex +0 -32
  203. data/lib/datalog/theme/theme.rb +0 -18
@@ -1,8 +1,10 @@
1
1
  @use 'sass:map';
2
2
  @use "sass:color";
3
+ @use "sass:meta";
3
4
 
4
5
  @use 'variables' as *;
5
6
  @use 'mixins' as *;
7
+ @use 'features';
6
8
 
7
9
  .card {
8
10
  background: white;
@@ -131,6 +133,35 @@ body.dark-mode .btn--ghost:hover {
131
133
  color: $dark-accent-primary;
132
134
  }
133
135
 
136
+ // Links styled as buttons, such as the demo links on project pages.
137
+ .button {
138
+ padding: 0.75rem 1.5rem;
139
+ border: none;
140
+ border-radius: 8px;
141
+ cursor: pointer;
142
+ font-weight: 600;
143
+ transition: all 0.2s ease;
144
+
145
+ &--primary {
146
+ background: var(--color-accent, #3b82f6);
147
+ color: white;
148
+
149
+ &:hover {
150
+ background: var(--color-accent-dark, #2563eb);
151
+ }
152
+ }
153
+
154
+ &--secondary {
155
+ background: transparent;
156
+ border: 1px solid var(--color-border, #cbd5e0);
157
+ color: var(--color-text-primary, #1a202c);
158
+
159
+ &:hover {
160
+ background: var(--color-background-secondary, #f7fafc);
161
+ }
162
+ }
163
+ }
164
+
134
165
  .stat {
135
166
  display: grid;
136
167
  gap: map.get($spacing, 1);
@@ -877,317 +908,8 @@ body.dark-mode {
877
908
  // Notebook & scholarly references
878
909
  // ------------------------------------------------------------
879
910
 
880
- .notebook-article {
881
- display: grid;
882
- gap: map.get($spacing, 5);
883
- margin: map.get($spacing, 6) auto;
884
- max-width: 1200px;
885
- }
886
-
887
- .notebook-article__header {
888
- background: rgba($color-surface-100, 0.8);
889
- padding: map.get($spacing, 6);
890
- border-radius: 1.25rem;
891
- box-shadow: 0 20px 60px rgba($color-ink-900, 0.08);
892
- position: relative;
893
- overflow: hidden;
894
- }
895
-
896
- .notebook-article__header::after {
897
- content: '';
898
- position: absolute;
899
- inset: auto -30% -45% auto;
900
- width: 45%;
901
- height: 45%;
902
- background: radial-gradient(circle at center, rgba($color-accent-primary, 0.35), transparent 65%);
903
- pointer-events: none;
904
- }
905
-
906
- .notebook-article__label {
907
- text-transform: uppercase;
908
- letter-spacing: 0.12em;
909
- font-size: map.get($font-size-scale, xs);
910
- color: $color-accent-primary;
911
- margin-bottom: map.get($spacing, 2);
912
- }
913
-
914
- .notebook-article__title {
915
- font-size: clamp(2.4rem, 4vw, 3.2rem);
916
- margin: 0 0 map.get($spacing, 3);
917
- }
918
-
919
- .notebook-article__summary {
920
- font-size: map.get($font-size-scale, md);
921
- color: $color-ink-600;
922
- max-width: 65ch;
923
- margin-bottom: map.get($spacing, 4);
924
- }
925
-
926
- .notebook-article__meta {
927
- list-style: none;
928
- padding: 0;
929
- margin: 0 0 map.get($spacing, 4);
930
- display: flex;
931
- flex-wrap: wrap;
932
- gap: map.get($spacing, 3);
933
- color: $color-ink-600;
934
- }
935
-
936
- .notebook-article__meta li {
937
- display: flex;
938
- gap: map.get($spacing, 1);
939
- align-items: baseline;
940
- }
941
-
942
- .notebook-article__meta span {
943
- font-weight: 600;
944
- color: $color-ink-800;
945
- }
946
-
947
- .notebook-article__actions {
948
- display: flex;
949
- flex-wrap: wrap;
950
- gap: map.get($spacing, 3);
951
- margin-bottom: map.get($spacing, 4);
952
- }
953
-
954
- .notebook-article__actions .btn {
955
- display: inline-flex;
956
- align-items: center;
957
- gap: map.get($spacing, 2);
958
- }
959
-
960
- .notebook-article__tags {
961
- display: flex;
962
- flex-wrap: wrap;
963
- gap: map.get($spacing, 2);
964
- padding: 0;
965
- margin: 0;
966
- list-style: none;
967
- }
968
-
969
- .notebook-article__tags li {
970
- background: rgba($color-accent-tertiary, 0.18);
971
- color: $color-accent-tertiary;
972
- border-radius: 999px;
973
- padding: map.get($spacing, 1) map.get($spacing, 3);
974
- font-size: map.get($font-size-scale, xs);
975
- letter-spacing: 0.04em;
976
- }
977
-
978
- .notebook-article__layout {
979
- display: grid;
980
- gap: map.get($spacing, 5);
981
- }
982
-
983
- @media (min-width: 960px) {
984
- .notebook-article__layout {
985
- grid-template-columns: minmax(0, 2.3fr) minmax(280px, 1fr);
986
- gap: map.get($spacing, 6);
987
- }
988
- }
989
-
990
- .notebook-article__content {
991
- display: flex;
992
- flex-direction: column;
993
- gap: map.get($spacing, 4);
994
- }
995
-
996
- .notebook-article__sidebar {
997
- position: sticky;
998
- top: calc(var(--header-height, 96px) + map.get($spacing, 4));
999
- align-self: start;
1000
- display: flex;
1001
- flex-direction: column;
1002
- gap: map.get($spacing, 4);
1003
- }
1004
-
1005
- .notebook-sidebar__section {
1006
- background: rgba($color-surface-100, 0.8);
1007
- border-radius: 1rem;
1008
- padding: map.get($spacing, 4);
1009
- box-shadow: 0 12px 30px rgba($color-ink-900, 0.04);
1010
- }
1011
-
1012
- .notebook-sidebar__section h2 {
1013
- font-size: map.get($font-size-scale, sm);
1014
- text-transform: uppercase;
1015
- letter-spacing: 0.08em;
1016
- margin-bottom: map.get($spacing, 3);
1017
- }
1018
-
1019
- .notebook-sidebar__stats {
1020
- list-style: none;
1021
- padding: 0;
1022
- margin: 0;
1023
- display: grid;
1024
- gap: map.get($spacing, 2);
1025
- }
1026
-
1027
- .notebook-sidebar__stats li {
1028
- font-size: map.get($font-size-scale, sm);
1029
- color: $color-ink-700;
1030
- }
1031
-
1032
- .notebook-sidebar__metadata {
1033
- margin: 0;
1034
- display: grid;
1035
- gap: map.get($spacing, 2);
1036
- }
1037
-
1038
- .notebook-sidebar__metadata div {
1039
- display: grid;
1040
- gap: map.get($spacing, 1);
1041
- }
1042
-
1043
- .notebook-sidebar__metadata dt {
1044
- font-size: map.get($font-size-scale, xs);
1045
- text-transform: uppercase;
1046
- letter-spacing: 0.06em;
1047
- color: $color-ink-500;
1048
- }
1049
-
1050
- .notebook-sidebar__metadata dd {
1051
- margin: 0;
1052
- font-size: map.get($font-size-scale, sm);
1053
- color: $color-ink-700;
1054
- word-break: break-word;
1055
- }
1056
-
1057
- .notebook-sidebar__clone {
1058
- background: rgba($color-ink-900, 0.08);
1059
- border-radius: 0.75rem;
1060
- padding: map.get($spacing, 3);
1061
- font-family: $font-stack-code;
1062
- overflow-x: auto;
1063
- }
1064
-
1065
- .notebook-sidebar__links {
1066
- list-style: none;
1067
- padding: 0;
1068
- margin: 0;
1069
- display: grid;
1070
- gap: map.get($spacing, 2);
1071
- }
1072
-
1073
- .notebook-sidebar__link {
1074
- font-weight: 600;
1075
- color: $color-accent-primary;
1076
- }
1077
-
1078
- .notebook-cell {
1079
- border-left: 4px solid $color-accent-primary;
1080
- padding: map.get($spacing, 4);
1081
- border-radius: 1rem;
1082
- background: rgba($color-accent-primary, 0.06);
1083
- margin: map.get($spacing, 3) 0;
1084
- box-shadow: inset 0 0 0 1px rgba($color-ink-900, 0.04);
1085
- }
1086
-
1087
- .notebook-cell--input {
1088
- border-left-color: $color-accent-secondary;
1089
- }
1090
-
1091
- .notebook-cell--output {
1092
- border-left-color: $color-accent-tertiary;
1093
- }
1094
-
1095
- .notebook-cell__header {
1096
- display: flex;
1097
- align-items: center;
1098
- justify-content: space-between;
1099
- font-size: map.get($font-size-scale, xs);
1100
- color: $color-ink-500;
1101
- margin-bottom: map.get($spacing, 2);
1102
- text-transform: uppercase;
1103
- letter-spacing: 0.08em;
1104
- }
1105
-
1106
- .notebook-cell__code {
1107
- margin: 0;
1108
- overflow: auto;
1109
- border-radius: 0.75rem;
1110
- background: rgba($color-ink-900, 0.08);
1111
- padding: map.get($spacing, 3);
1112
- }
1113
-
1114
- .notebook-cell__outputs {
1115
- display: grid;
1116
- gap: map.get($spacing, 3);
1117
- }
1118
-
1119
- .notebook-output {
1120
- border-radius: 0.75rem;
1121
- padding: map.get($spacing, 3);
1122
- font-family: $font-stack-code;
1123
- background: rgba($color-ink-900, 0.04);
1124
- overflow-x: auto;
1125
- margin: 0;
1126
- }
1127
-
1128
- .notebook-output--stream {
1129
- color: $color-ink-700;
1130
- }
1131
-
1132
- .notebook-output--error {
1133
- color: $color-critical-600;
1134
- background: rgba($color-critical-200, 0.35);
1135
- border: 1px solid rgba($color-critical-400, 0.6);
1136
- }
1137
-
1138
- .notebook-output__trace {
1139
- margin-top: map.get($spacing, 2);
1140
- white-space: pre-wrap;
1141
- }
1142
-
1143
- .notebook-output__figure {
1144
- margin: 0;
1145
- }
1146
-
1147
- .notebook-output__figure img {
1148
- width: 100%;
1149
- height: auto;
1150
- border-radius: 0.75rem;
1151
- box-shadow: 0 10px 30px rgba($color-ink-900, 0.15);
1152
- }
1153
-
1154
- .notebook-output-plotly,
1155
- .notebook-output-vega {
1156
- min-height: 320px;
1157
- border-radius: 0.75rem;
1158
- background: rgba($color-ink-900, 0.04);
1159
- display: grid;
1160
- place-items: center;
1161
- padding: map.get($spacing, 3);
1162
- }
1163
-
1164
- .notebook-output__warning {
1165
- font-size: map.get($font-size-scale, sm);
1166
- color: $color-ink-600;
1167
- text-align: center;
1168
- margin: 0;
1169
- }
1170
-
1171
- .notebook-output--widget {
1172
- font-style: italic;
1173
- color: $color-accent-secondary-text;
1174
- }
1175
-
1176
- .notebook-segment {
1177
- display: grid;
1178
- gap: map.get($spacing, 2);
1179
- }
1180
-
1181
- .notebook-segment__label {
1182
- font-size: map.get($font-size-scale, xs);
1183
- letter-spacing: 0.1em;
1184
- text-transform: uppercase;
1185
- color: $color-ink-400;
1186
- }
1187
-
1188
- .notebook-segment__body {
1189
- display: grid;
1190
- gap: map.get($spacing, 3);
911
+ @if features.$notebooks {
912
+ @include meta.load-css('notebooks');
1191
913
  }
1192
914
 
1193
915
  .reference-list {
@@ -1378,560 +1100,42 @@ body.dark-mode {
1378
1100
  // Technical search experience
1379
1101
  // ------------------------------------------------------------
1380
1102
 
1381
- .search-page {
1382
- .page {
1383
- padding-bottom: map.get($spacing, 7);
1384
- }
1385
-
1386
- .page-header {
1387
- max-width: $max-width-wide;
1388
- }
1103
+ @if features.$search {
1104
+ @include meta.load-css('search-page');
1389
1105
  }
1390
1106
 
1391
- .search-app {
1107
+ .portfolio-card__github-stats {
1392
1108
  display: grid;
1393
- gap: map.get($spacing, 6);
1394
- margin-top: map.get($spacing, 4);
1109
+ grid-template-columns: repeat(auto-fit, minmax(8rem, 1fr));
1110
+ gap: 0.75rem;
1111
+ margin-top: 1rem;
1395
1112
 
1396
- @media (min-width: map.get($breakpoints, lg)) {
1397
- grid-template-columns: minmax(0, 25rem) minmax(0, 1fr);
1398
- align-items: start;
1113
+ div {
1114
+ padding: 0.75rem;
1115
+ background: rgba(50, 119, 246, 0.08);
1116
+ border-radius: 0.75rem;
1117
+ text-align: center;
1399
1118
  }
1400
- }
1401
1119
 
1402
- .search-app__panel {
1403
- display: grid;
1404
- gap: map.get($spacing, 5);
1120
+ dt {
1121
+ margin: 0;
1122
+ font-size: 0.75rem;
1123
+ text-transform: uppercase;
1124
+ letter-spacing: 0.08em;
1125
+ color: rgba(11, 29, 61, 0.7);
1126
+ }
1405
1127
 
1406
- @media (min-width: map.get($breakpoints, lg)) {
1407
- position: sticky;
1408
- top: 6.5rem;
1128
+ dd {
1129
+ margin: 0.25rem 0 0;
1130
+ font-size: 1.25rem;
1131
+ font-weight: 600;
1132
+ color: inherit;
1409
1133
  }
1410
- }
1411
1134
 
1412
- .search-app__form,
1413
- .search-app__analytics {
1414
- background: rgba($color-neutral-100, 0.7);
1415
- border: 1px solid rgba($color-neutral-900, 0.1);
1416
- border-radius: 1rem;
1417
- padding: map.get($spacing, 5);
1418
- box-shadow: $shadow-soft;
1419
- backdrop-filter: blur(8px);
1420
- }
1421
-
1422
- .search-app__form {
1423
- display: grid;
1424
- gap: map.get($spacing, 5);
1425
- }
1426
-
1427
- .search-app__label {
1428
- font-weight: 600;
1429
- color: $color-ink-700;
1430
- }
1431
-
1432
- .search-app__input-group {
1433
- display: flex;
1434
- align-items: center;
1435
- gap: map.get($spacing, 2);
1436
- }
1437
-
1438
- .search-app__input {
1439
- flex: 1;
1440
- padding: map.get($spacing, 3) map.get($spacing, 4);
1441
- border-radius: 0.75rem;
1442
- border: 1px solid rgba($color-neutral-900, 0.18);
1443
- background: #fff;
1444
- font-size: map.get($font-size-scale, md);
1445
- font-family: $font-family-mono;
1446
- color: $color-ink-900;
1447
- transition: border-color $transition-snappy, box-shadow $transition-snappy;
1448
-
1449
- &:focus {
1450
- outline: none;
1451
- border-color: $color-accent-primary;
1452
- box-shadow: 0 0 0 3px rgba($color-accent-primary, 0.2);
1453
- }
1454
- }
1455
-
1456
- .search-app__submit {
1457
- padding: map.get($spacing, 3) map.get($spacing, 4);
1458
- border-radius: 0.75rem;
1459
- border: none;
1460
- background: $color-accent-primary;
1461
- color: #fff;
1462
- font-weight: 600;
1463
- letter-spacing: 0.02em;
1464
- transition: transform $transition-snappy, box-shadow $transition-snappy, background $transition-snappy;
1465
-
1466
- &:hover,
1467
- &:focus-visible {
1468
- background: color.adjust($color-accent-primary, $lightness: -6%);
1469
- transform: translateY(-1px);
1470
- box-shadow: 0 10px 24px rgba($color-accent-primary, 0.25);
1471
- }
1472
-
1473
- &:focus-visible {
1474
- @include focus-ring($color-accent-primary);
1475
- }
1476
- }
1477
-
1478
- .search-app__shortcuts {
1479
- margin: map.get($spacing, 2) 0 0;
1480
- color: $color-ink-500;
1481
- font-size: map.get($font-size-scale, sm);
1482
-
1483
- kbd {
1484
- display: inline-flex;
1485
- align-items: center;
1486
- justify-content: center;
1487
- min-width: 1.75rem;
1488
- padding: map.get($spacing, 1) map.get($spacing, 2);
1489
- margin: 0 map.get($spacing, 1);
1490
- border-radius: 0.5rem;
1491
- border: 1px solid rgba($color-neutral-900, 0.2);
1492
- background: #fff;
1493
- font-family: $font-family-mono;
1494
- font-size: 0.75em;
1495
- }
1496
- }
1497
-
1498
- .search-app__autocomplete {
1499
- margin-top: map.get($spacing, 3);
1500
- border-radius: 0.75rem;
1501
- border: 1px solid rgba($color-neutral-900, 0.14);
1502
- background: #fff;
1503
- box-shadow: $shadow-soft;
1504
- max-height: 16rem;
1505
- overflow: auto;
1506
- padding: map.get($spacing, 2);
1507
- display: grid;
1508
- gap: map.get($spacing, 1);
1509
- }
1510
-
1511
- .search-autocomplete__option {
1512
- width: 100%;
1513
- text-align: left;
1514
- padding: map.get($spacing, 2) map.get($spacing, 3);
1515
- border-radius: 0.5rem;
1516
- border: none;
1517
- background: transparent;
1518
- cursor: pointer;
1519
- font-size: map.get($font-size-scale, sm);
1520
- color: $color-ink-700;
1521
- transition: background $transition-snappy, color $transition-snappy;
1522
-
1523
- &.is-active,
1524
- &:hover,
1525
- &:focus-visible {
1526
- background: rgba($color-accent-primary, 0.12);
1527
- color: $color-accent-primary;
1528
- }
1529
- }
1530
-
1531
- .search-app__filters {
1532
- border: 1px dashed rgba($color-neutral-900, 0.18);
1533
- border-radius: 0.75rem;
1534
- padding: map.get($spacing, 4);
1535
- }
1536
-
1537
- .search-app__filters-grid {
1538
- display: grid;
1539
- gap: map.get($spacing, 4);
1540
-
1541
- @media (min-width: map.get($breakpoints, md)) {
1542
- grid-template-columns: repeat(2, minmax(0, 1fr));
1543
- }
1544
- }
1545
-
1546
- .search-filter {
1547
- display: grid;
1548
- gap: map.get($spacing, 2);
1549
- font-size: map.get($font-size-scale, sm);
1550
-
1551
- select {
1552
- width: 100%;
1553
- border-radius: 0.75rem;
1554
- border: 1px solid rgba($color-neutral-900, 0.18);
1555
- padding: map.get($spacing, 2) map.get($spacing, 3);
1556
- font-size: map.get($font-size-scale, sm);
1557
- background: #fff;
1558
- color: $color-ink-700;
1559
-
1560
- &:focus {
1561
- outline: none;
1562
- border-color: $color-accent-primary;
1563
- box-shadow: 0 0 0 3px rgba($color-accent-primary, 0.2);
1564
- }
1565
- }
1566
- }
1567
-
1568
- .search-filter__tags {
1569
- display: flex;
1570
- flex-wrap: wrap;
1571
- gap: map.get($spacing, 2);
1572
- }
1573
-
1574
- .search-filter__tag {
1575
- padding: map.get($spacing, 2) map.get($spacing, 3);
1576
- border-radius: 999px;
1577
- border: 1px solid rgba($color-neutral-900, 0.18);
1578
- background: rgba($color-neutral-900, 0.05);
1579
- font-size: map.get($font-size-scale, xs);
1580
- letter-spacing: 0.04em;
1581
- text-transform: uppercase;
1582
- color: $color-ink-600;
1583
- transition: background $transition-snappy, color $transition-snappy, border-color $transition-snappy;
1584
-
1585
- &[aria-pressed='true'] {
1586
- background: rgba($color-accent-primary, 0.16);
1587
- color: $color-accent-primary;
1588
- border-color: rgba($color-accent-primary, 0.45);
1589
- }
1590
-
1591
- &:hover,
1592
- &:focus-visible {
1593
- background: rgba($color-accent-secondary, 0.16);
1594
- color: $color-accent-secondary-text;
1595
- }
1596
- }
1597
-
1598
- .search-filter__empty {
1599
- font-size: map.get($font-size-scale, sm);
1600
- color: $color-ink-500;
1601
- }
1602
-
1603
- .search-app__analytics-title {
1604
- font-size: map.get($font-size-scale, md);
1605
- margin-bottom: map.get($spacing, 2);
1606
- }
1607
-
1608
- .search-app__analytics-empty {
1609
- font-size: map.get($font-size-scale, sm);
1610
- color: $color-ink-500;
1611
- }
1612
-
1613
- .search-app__analytics-list {
1614
- display: grid;
1615
- gap: map.get($spacing, 2);
1616
- margin: 0;
1617
- padding: 0;
1618
- list-style: none;
1619
- }
1620
-
1621
- .search-analytics__query {
1622
- width: 100%;
1623
- border-radius: 0.75rem;
1624
- border: 1px solid rgba($color-neutral-900, 0.14);
1625
- background: rgba($color-neutral-900, 0.04);
1626
- padding: map.get($spacing, 2) map.get($spacing, 3);
1627
- font-size: map.get($font-size-scale, sm);
1628
- text-align: left;
1629
- cursor: pointer;
1630
- color: $color-ink-700;
1631
- transition: background $transition-snappy, color $transition-snappy, border-color $transition-snappy;
1632
-
1633
- &:hover,
1634
- &:focus-visible {
1635
- background: rgba($color-accent-primary, 0.14);
1636
- border-color: rgba($color-accent-primary, 0.35);
1637
- color: $color-accent-primary;
1638
- }
1639
- }
1640
-
1641
- .search-app__results {
1642
- display: grid;
1643
- gap: map.get($spacing, 4);
1644
- }
1645
-
1646
- .search-app__results-header {
1647
- display: flex;
1648
- flex-direction: column;
1649
- gap: map.get($spacing, 1);
1650
- }
1651
-
1652
- .search-app__results-meta {
1653
- font-size: map.get($font-size-scale, sm);
1654
- color: $color-ink-500;
1655
- }
1656
-
1657
- .search-app__results-list {
1658
- display: grid;
1659
- gap: map.get($spacing, 4);
1660
- margin: 0;
1661
- padding: 0;
1662
- list-style: none;
1663
- }
1664
-
1665
- .search-result__card {
1666
- border-radius: 1rem;
1667
- border: 1px solid rgba($color-neutral-900, 0.1);
1668
- background: rgba($color-neutral-100, 0.65);
1669
- box-shadow: $shadow-soft;
1670
- padding: map.get($spacing, 5);
1671
- display: grid;
1672
- gap: map.get($spacing, 3);
1673
- }
1674
-
1675
- .search-result__meta {
1676
- display: flex;
1677
- flex-wrap: wrap;
1678
- gap: map.get($spacing, 2);
1679
- font-size: map.get($font-size-scale, xs);
1680
- text-transform: uppercase;
1681
- letter-spacing: 0.08em;
1682
- color: $color-ink-500;
1683
- }
1684
-
1685
- .search-result__title a {
1686
- color: $color-ink-900;
1687
- text-decoration: none;
1688
- transition: color $transition-snappy;
1689
-
1690
- &:hover,
1691
- &:focus-visible {
1692
- color: $color-accent-primary;
1693
- }
1694
- }
1695
-
1696
- .search-result__body {
1697
- display: grid;
1698
- gap: map.get($spacing, 3);
1699
- }
1700
-
1701
- .search-result__code {
1702
- margin: 0;
1703
- border-radius: 0.75rem;
1704
- overflow: hidden;
1705
- border: 1px solid rgba($color-neutral-900, 0.1);
1706
- max-height: 16rem;
1707
- font-size: 0.85rem;
1708
- }
1709
-
1710
- .search-result__math {
1711
- display: grid;
1712
- gap: map.get($spacing, 2);
1713
- padding: map.get($spacing, 3);
1714
- border-radius: 0.75rem;
1715
- border: 1px solid rgba($color-neutral-900, 0.12);
1716
- background: rgba($color-neutral-100, 0.85);
1717
- }
1718
-
1719
- .search-result__math-preview {
1720
- overflow-x: auto;
1721
- padding-bottom: map.get($spacing, 1);
1722
- }
1723
-
1724
- .search-result__math-source {
1725
- margin: 0;
1726
- background: rgba($color-neutral-900, 0.04);
1727
- border-radius: 0.5rem;
1728
- padding: map.get($spacing, 2);
1729
- font-size: 0.85rem;
1730
- }
1731
-
1732
- .search-result__math-copy {
1733
- justify-self: flex-start;
1734
- display: inline-flex;
1735
- align-items: center;
1736
- gap: map.get($spacing, 1);
1737
- border-radius: 999px;
1738
- border: 1px solid rgba($color-neutral-900, 0.18);
1739
- padding: 0.35rem 0.9rem;
1740
- font-size: map.get($font-size-scale, xs);
1741
- background: white;
1742
- color: $color-ink-700;
1743
- transition: background $transition-snappy, border-color $transition-snappy, color $transition-snappy;
1744
-
1745
- &:hover,
1746
- &:focus-visible {
1747
- background: rgba($color-accent-primary, 0.1);
1748
- border-color: rgba($color-accent-primary, 0.35);
1749
- color: $color-accent-primary;
1750
- }
1751
- }
1752
-
1753
- .search-result__math-copy.is-copied {
1754
- background: rgba($color-accent-primary, 0.12);
1755
- border-color: rgba($color-accent-primary, 0.4);
1756
- color: $color-accent-primary;
1757
- }
1758
-
1759
- .search-result__excerpt {
1760
- font-size: map.get($font-size-scale, sm);
1761
- color: $color-ink-600;
1762
-
1763
- .math-expression {
1764
- font-family: $font-family-mono;
1765
- background: rgba($color-accent-secondary, 0.1);
1766
- padding: map.get($spacing, 1) map.get($spacing, 2);
1767
- border-radius: 0.5rem;
1768
- }
1769
- }
1770
-
1771
- .search-result__footer {
1772
- display: flex;
1773
- flex-wrap: wrap;
1774
- gap: map.get($spacing, 3);
1775
- align-items: center;
1776
- justify-content: space-between;
1777
- font-size: map.get($font-size-scale, xs);
1778
- color: $color-ink-500;
1779
- }
1780
-
1781
- .search-result__tags {
1782
- display: flex;
1783
- gap: map.get($spacing, 2);
1784
- flex-wrap: wrap;
1785
- margin: 0;
1786
- padding: 0;
1787
- list-style: none;
1788
-
1789
- li {
1790
- background: rgba($color-neutral-900, 0.06);
1791
- border-radius: 999px;
1792
- padding: map.get($spacing, 1) map.get($spacing, 2);
1793
- }
1794
- }
1795
-
1796
- .search-app__no-results {
1797
- font-size: map.get($font-size-scale, md);
1798
- color: $color-ink-500;
1799
- text-align: center;
1800
- }
1801
-
1802
- .search-app__noscript {
1803
- margin-top: map.get($spacing, 4);
1804
- padding: map.get($spacing, 4);
1805
- border-radius: 0.75rem;
1806
- background: rgba($color-warning, 0.15);
1807
- border: 1px solid rgba($color-warning, 0.45);
1808
- color: $color-ink-700;
1809
- }
1810
-
1811
- body.dark-mode {
1812
- .search-app__form,
1813
- .search-app__analytics,
1814
- .search-result__card {
1815
- background: rgba($dark-surface-200, 0.9);
1816
- border-color: rgba($dark-ink-500, 0.25);
1817
- box-shadow: none;
1818
- }
1819
-
1820
- .search-app__input,
1821
- .search-filter select {
1822
- background: $dark-surface-300;
1823
- border-color: rgba($dark-ink-500, 0.35);
1824
- color: $dark-ink-900;
1825
-
1826
- &:focus {
1827
- border-color: $dark-accent-primary;
1828
- box-shadow: 0 0 0 3px rgba($dark-accent-primary, 0.35);
1829
- }
1830
- }
1831
-
1832
- .search-app__autocomplete,
1833
- .search-autocomplete__option,
1834
- .search-analytics__query,
1835
- .search-filter__tag,
1836
- .search-result__tags li {
1837
- background: rgba($dark-surface-300, 0.85);
1838
- border-color: rgba($dark-ink-500, 0.3);
1839
- color: $dark-ink-700;
1840
- }
1841
-
1842
- .search-app__shortcuts,
1843
- .search-app__analytics-empty,
1844
- .search-app__results-meta,
1845
- .search-result__meta,
1846
- .search-app__no-results {
1847
- color: rgba($dark-ink-500, 0.85);
1848
- }
1849
-
1850
- .search-result__title a {
1851
- color: $dark-ink-900;
1852
-
1853
- &:hover,
1854
- &:focus-visible {
1855
- color: $dark-accent-primary;
1856
- }
1857
- }
1858
-
1859
- .search-result__excerpt {
1860
- color: $dark-ink-700;
1861
-
1862
- .math-expression {
1863
- background: rgba($dark-accent-secondary, 0.25);
1864
- color: $dark-ink-900;
1865
- }
1866
- }
1867
-
1868
- .search-result__math {
1869
- background: rgba($dark-surface-300, 0.85);
1870
- border-color: rgba($dark-ink-500, 0.3);
1871
- }
1872
-
1873
- .search-result__math-source {
1874
- background: rgba($dark-surface-300, 0.65);
1875
- }
1876
-
1877
- .search-result__math-copy {
1878
- background: $dark-surface-300;
1879
- border-color: rgba($dark-ink-500, 0.35);
1880
- color: $dark-ink-700;
1881
-
1882
- &:hover,
1883
- &:focus-visible {
1884
- background: rgba($dark-accent-primary, 0.15);
1885
- border-color: rgba($dark-accent-primary, 0.45);
1886
- color: $dark-accent-primary;
1887
- }
1888
- }
1889
-
1890
- .search-result__math-copy.is-copied {
1891
- background: rgba($dark-accent-primary, 0.2);
1892
- border-color: rgba($dark-accent-primary, 0.5);
1893
- color: $dark-accent-primary;
1894
- }
1895
-
1896
- .search-filter__tag[aria-pressed='true'] {
1897
- background: rgba($dark-accent-primary, 0.35);
1898
- color: $dark-ink-900;
1899
- border-color: rgba($dark-accent-primary, 0.55);
1900
- }
1901
- }
1902
-
1903
- .portfolio-card__github-stats {
1904
- display: grid;
1905
- grid-template-columns: repeat(auto-fit, minmax(8rem, 1fr));
1906
- gap: 0.75rem;
1907
- margin-top: 1rem;
1908
-
1909
- div {
1910
- padding: 0.75rem;
1911
- background: rgba(50, 119, 246, 0.08);
1912
- border-radius: 0.75rem;
1913
- text-align: center;
1914
- }
1915
-
1916
- dt {
1917
- margin: 0;
1918
- font-size: 0.75rem;
1919
- text-transform: uppercase;
1920
- letter-spacing: 0.08em;
1921
- color: rgba(11, 29, 61, 0.7);
1922
- }
1923
-
1924
- dd {
1925
- margin: 0.25rem 0 0;
1926
- font-size: 1.25rem;
1927
- font-weight: 600;
1928
- color: inherit;
1929
- }
1930
-
1931
- body.dark-mode & {
1932
- div {
1933
- background: rgba(50, 119, 246, 0.2);
1934
- }
1135
+ body.dark-mode & {
1136
+ div {
1137
+ background: rgba(50, 119, 246, 0.2);
1138
+ }
1935
1139
 
1936
1140
  dt {
1937
1141
  color: rgba(245, 247, 255, 0.8);
@@ -2058,305 +1262,12 @@ body.dark-mode {
2058
1262
  color: #fff;
2059
1263
  }
2060
1264
 
2061
- .open-science-badges {
2062
- margin-block: 3rem;
2063
- padding: 1.5rem;
2064
- border-radius: 1rem;
2065
- background: linear-gradient(135deg, rgba(12, 35, 64, 0.05), rgba(50, 119, 246, 0.08));
2066
- }
2067
-
2068
- .open-science-badges__intro {
2069
- margin-bottom: 1rem;
2070
- color: var(--muted-foreground, #4a5568);
2071
- }
2072
-
2073
- .open-science-badges__list {
2074
- display: flex;
2075
- flex-wrap: wrap;
2076
- gap: 1rem;
2077
- padding: 0;
2078
- margin: 0;
2079
- list-style: none;
2080
- }
2081
-
2082
- .open-science-badge {
2083
- display: grid;
2084
- gap: 0.25rem;
2085
- padding: 0.85rem 1rem;
2086
- min-width: 10rem;
2087
- border-radius: 0.75rem;
2088
- background: rgba(12, 35, 64, 0.08);
2089
- border: 1px solid rgba(12, 35, 64, 0.12);
2090
- transition: transform 0.2s ease, box-shadow 0.2s ease;
2091
- }
2092
-
2093
- .open-science-badge:focus-within,
2094
- .open-science-badge:hover {
2095
- transform: translateY(-2px);
2096
- box-shadow: 0 8px 24px rgba(12, 35, 64, 0.12);
2097
- }
2098
-
2099
- .open-science-badge__label {
2100
- font-weight: 600;
2101
- }
2102
-
2103
- .open-science-badge__description,
2104
- .open-science-badge__criteria {
2105
- font-size: 0.85rem;
2106
- color: var(--muted-foreground, #4a5568);
2107
- }
2108
-
2109
- .academic-dashboard {
2110
- display: grid;
2111
- gap: 2.5rem;
2112
- }
2113
-
2114
- .academic-dashboard__header {
2115
- text-align: center;
2116
- max-width: 60ch;
2117
- margin: 0 auto;
2118
- }
2119
-
2120
- .academic-dashboard__header h1 {
2121
- font-size: clamp(1.8rem, 3vw, 2.4rem);
2122
- margin-bottom: 0.5rem;
2123
- }
2124
-
2125
- .academic-dashboard__header p {
2126
- color: var(--muted-foreground, #4a5568);
2127
- }
2128
-
2129
- .academic-dashboard__profiles {
2130
- background: var(--surface-card, #fff);
2131
- border-radius: 1.25rem;
2132
- padding: 2rem;
2133
- box-shadow: 0 12px 40px rgba(12, 35, 64, 0.08);
2134
- }
2135
-
2136
- .academic-profiles__grid {
2137
- display: grid;
2138
- gap: 1.5rem;
2139
- }
2140
-
2141
- @media (min-width: 56rem) {
2142
- .academic-profiles__grid {
2143
- grid-template-columns: repeat(2, minmax(0, 1fr));
2144
- }
2145
- }
2146
-
2147
- .academic-profile {
2148
- border: 1px solid rgba(12, 35, 64, 0.12);
2149
- border-radius: 1rem;
2150
- padding: 1.5rem;
2151
- background: rgba(12, 35, 64, 0.03);
2152
- display: grid;
2153
- gap: 1rem;
2154
- }
2155
-
2156
- .academic-profile header {
2157
- display: flex;
2158
- justify-content: space-between;
2159
- align-items: center;
2160
- }
2161
-
2162
- .academic-profile h3 {
2163
- margin: 0;
2164
- font-size: 1.1rem;
2165
- }
2166
-
2167
- .academic-profile a {
2168
- font-size: 0.875rem;
2169
- font-weight: 500;
2170
- color: var(--accent, #3277f6);
2171
- }
2172
-
2173
- .academic-profile dl {
2174
- display: grid;
2175
- gap: 0.5rem;
2176
- }
2177
-
2178
- .academic-profile dl div {
2179
- display: flex;
2180
- justify-content: space-between;
2181
- gap: 1rem;
2182
- }
2183
-
2184
- .academic-profile dt {
2185
- font-weight: 600;
2186
- color: var(--muted-foreground, #4a5568);
2187
- }
2188
-
2189
- .academic-profile dd {
2190
- margin: 0;
2191
- }
2192
-
2193
- .citation-metrics {
2194
- display: grid;
2195
- gap: 1.5rem;
2196
- border-radius: 1.25rem;
2197
- padding: 2rem;
2198
- background: rgba(50, 119, 246, 0.08);
2199
- }
2200
-
2201
- .citation-metrics__totals {
2202
- display: grid;
2203
- gap: 1rem;
2204
- }
2205
-
2206
- @media (min-width: 40rem) {
2207
- .citation-metrics__totals {
2208
- grid-template-columns: repeat(3, minmax(0, 1fr));
2209
- }
2210
- }
2211
-
2212
- .citation-metrics .metric {
2213
- background: rgba(255, 255, 255, 0.8);
2214
- border-radius: 1rem;
2215
- padding: 1rem;
2216
- text-align: center;
2217
- font-weight: 600;
2218
- display: grid;
2219
- gap: 0.5rem;
2220
- }
2221
-
2222
- .citation-metrics .metric dt {
2223
- margin: 0;
2224
- font-size: 0.9rem;
2225
- color: var(--muted-foreground, #4a5568);
2226
- }
2227
-
2228
- .citation-metrics .metric dd {
2229
- margin: 0;
2230
- font-size: 1.5rem;
2231
- }
2232
-
2233
- .citation-metrics__details {
2234
- background: rgba(255, 255, 255, 0.92);
2235
- border-radius: 1rem;
2236
- padding: 1rem 1.5rem;
2237
- }
2238
-
2239
- .citation-metrics__details ul {
2240
- margin: 0;
2241
- padding-left: 1.25rem;
2242
- }
2243
-
2244
- .citation-metrics__timeline {
2245
- background: rgba(12, 35, 64, 0.08);
2246
- border-radius: 1rem;
2247
- padding: 1rem 1.5rem;
2248
- }
2249
-
2250
- .citation-metrics__timeline ul {
2251
- display: grid;
2252
- gap: 0.75rem;
2253
- margin: 0;
2254
- padding: 0;
2255
- list-style: none;
2256
- }
2257
-
2258
- .citation-metrics__timeline li {
2259
- display: flex;
2260
- justify-content: space-between;
2261
- align-items: center;
2262
- gap: 1rem;
2263
- padding: 0.5rem 0.75rem;
2264
- border-radius: 0.75rem;
2265
- background: linear-gradient(90deg, rgba(50, 119, 246, 0.15) var(--timeline-value, 35%), transparent 0);
2266
- }
2267
-
2268
- .bibliography-export {
2269
- display: grid;
2270
- gap: 1rem;
2271
- }
2272
-
2273
- .bibliography-export textarea {
2274
- width: 100%;
2275
- min-height: 16rem;
2276
- font-family: var(--font-mono, "Fira Code", monospace);
2277
- border-radius: 0.75rem;
2278
- border: 1px solid rgba(12, 35, 64, 0.2);
2279
- padding: 1.25rem;
2280
- background: rgba(12, 35, 64, 0.04);
2281
- }
2282
-
2283
- .bibliography-export__actions {
2284
- display: flex;
2285
- flex-wrap: wrap;
2286
- gap: 0.75rem;
2287
- }
2288
-
2289
- .submission-controls,
2290
- .calendar-controls {
2291
- display: flex;
2292
- align-items: center;
2293
- gap: 0.75rem;
2294
- margin-bottom: 1rem;
2295
- }
2296
-
2297
- .submission-controls select,
2298
- .calendar-controls select {
2299
- border-radius: 0.5rem;
2300
- padding: 0.5rem 0.75rem;
2301
- }
2302
-
2303
- .submission-list,
2304
- .calendar-list,
2305
- .funding-list,
2306
- .opportunity-list,
2307
- .mentorship-list,
2308
- .workflow-list {
2309
- list-style: none;
2310
- margin: 0;
2311
- padding: 0;
2312
- display: grid;
2313
- gap: 1rem;
2314
- }
2315
-
2316
- .submission-card,
2317
- .calendar-list li,
2318
- .funding-list li,
2319
- .opportunity-list li,
2320
- .mentorship-list li,
2321
- .workflow-list li {
2322
- border: 1px solid rgba(12, 35, 64, 0.12);
2323
- border-radius: 1rem;
2324
- padding: 1.25rem;
2325
- background: rgba(255, 255, 255, 0.92);
2326
- }
2327
-
2328
- .status-badge {
2329
- display: inline-flex;
2330
- align-items: center;
2331
- gap: 0.4rem;
2332
- padding: 0.2rem 0.65rem;
2333
- border-radius: 999px;
2334
- background: rgba(50, 119, 246, 0.15);
2335
- color: var(--accent-foreground, #0b1d3d);
2336
- font-size: 0.85rem;
2337
- font-weight: 600;
2338
- }
2339
-
2340
- .workflow-grid {
2341
- display: grid;
2342
- gap: 1.5rem;
2343
- }
2344
-
2345
- @media (min-width: 56rem) {
2346
- .workflow-grid {
2347
- grid-template-columns: repeat(2, minmax(0, 1fr));
2348
- }
1265
+ @if features.$open-science-badges {
1266
+ @include meta.load-css('open-science-badges');
2349
1267
  }
2350
1268
 
2351
- .networking-grid {
2352
- display: grid;
2353
- gap: 1.25rem;
2354
- }
2355
-
2356
- @media (min-width: 48rem) {
2357
- .networking-grid {
2358
- grid-template-columns: repeat(2, minmax(0, 1fr));
2359
- }
1269
+ @if features.$academic-dashboard {
1270
+ @include meta.load-css('academic-dashboard');
2360
1271
  }
2361
1272
 
2362
1273
  .research-profiles {