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