@undrr/undrr-mangrove 1.3.2 → 1.4.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 (156) hide show
  1. package/README.md +32 -25
  2. package/components/BarChart.js +2 -2
  3. package/components/BookCard.js +6 -0
  4. package/components/BookCard.js.LICENSE.txt +11 -0
  5. package/components/Breadcrumbs.js +6 -0
  6. package/components/Breadcrumbs.js.LICENSE.txt +9 -0
  7. package/components/Checkbox.js +6 -0
  8. package/components/Checkbox.js.LICENSE.txt +9 -0
  9. package/components/Chips.js +6 -0
  10. package/components/Chips.js.LICENSE.txt +9 -0
  11. package/components/CtaButton.js +6 -0
  12. package/components/CtaButton.js.LICENSE.txt +9 -0
  13. package/components/EmbedContainer.js +6 -0
  14. package/components/EmbedContainer.js.LICENSE.txt +9 -0
  15. package/components/Fetcher.js +2 -2
  16. package/components/Footer.js +6 -0
  17. package/components/Footer.js.LICENSE.txt +9 -0
  18. package/components/FormErrorSummary.js +6 -0
  19. package/components/FormErrorSummary.js.LICENSE.txt +9 -0
  20. package/components/FormGroup.js +6 -0
  21. package/components/FormGroup.js.LICENSE.txt +9 -0
  22. package/components/FullWidth.js +6 -0
  23. package/components/FullWidth.js.LICENSE.txt +9 -0
  24. package/components/Gallery.js +2 -2
  25. package/components/Hero.js +6 -0
  26. package/components/Hero.js.LICENSE.txt +9 -0
  27. package/components/HighlightBox.js +6 -0
  28. package/components/HighlightBox.js.LICENSE.txt +9 -0
  29. package/components/HorizontalBookCard.js +6 -0
  30. package/components/HorizontalBookCard.js.LICENSE.txt +11 -0
  31. package/components/HorizontalCard.js +6 -0
  32. package/components/HorizontalCard.js.LICENSE.txt +11 -0
  33. package/components/IconCard.js +2 -2
  34. package/components/IconCard.js.LICENSE.txt +1 -1
  35. package/components/Loader.js +6 -0
  36. package/components/Loader.js.LICENSE.txt +9 -0
  37. package/components/MapComponent.js +2 -2
  38. package/components/MegaMenu.js +2 -2
  39. package/components/PageHeader.js +6 -0
  40. package/components/PageHeader.js.LICENSE.txt +9 -0
  41. package/components/Pager.js +2 -2
  42. package/components/QuoteHighlight.js +2 -2
  43. package/components/Radio.js +6 -0
  44. package/components/Radio.js.LICENSE.txt +9 -0
  45. package/components/ScrollContainer.js +2 -2
  46. package/components/Select.js +6 -0
  47. package/components/Select.js.LICENSE.txt +9 -0
  48. package/components/ShareButtons.js +2 -2
  49. package/components/ShowMore.js +6 -0
  50. package/components/ShowMore.js.LICENSE.txt +9 -0
  51. package/components/StatsCard.js +2 -2
  52. package/components/SyndicationSearchWidget.js +2 -2
  53. package/components/Tab.js +6 -0
  54. package/components/Tab.js.LICENSE.txt +9 -0
  55. package/components/TextCta.js +6 -0
  56. package/components/TextCta.js.LICENSE.txt +11 -0
  57. package/components/TextInput.js +6 -0
  58. package/components/TextInput.js.LICENSE.txt +9 -0
  59. package/components/Textarea.js +6 -0
  60. package/components/Textarea.js.LICENSE.txt +9 -0
  61. package/components/VerticalCard.js +6 -0
  62. package/components/VerticalCard.js.LICENSE.txt +11 -0
  63. package/components/hydrate.js +5 -0
  64. package/css/style-delta.css +464 -0
  65. package/css/style-delta.css.map +1 -0
  66. package/css/style-gutenberg.css +19 -18
  67. package/css/style-gutenberg.css.map +1 -1
  68. package/css/style-irp-legacy.css +469 -0
  69. package/css/style-irp-legacy.css.map +1 -0
  70. package/css/style-irp.css +96 -103
  71. package/css/style-irp.css.map +1 -1
  72. package/css/style-legacy.css +462 -0
  73. package/css/style-legacy.css.map +1 -0
  74. package/css/style-mcr-legacy.css +469 -0
  75. package/css/style-mcr-legacy.css.map +1 -0
  76. package/css/style-mcr.css +96 -103
  77. package/css/style-mcr.css.map +1 -1
  78. package/css/style-preventionweb-legacy.css +469 -0
  79. package/css/style-preventionweb-legacy.css.map +1 -0
  80. package/css/style-preventionweb.css +96 -103
  81. package/css/style-preventionweb.css.map +1 -1
  82. package/css/style.css +96 -103
  83. package/css/style.css.map +1 -1
  84. package/error-pages/401.html +10 -11
  85. package/error-pages/403.html +11 -12
  86. package/error-pages/404.html +13 -14
  87. package/error-pages/429.html +12 -13
  88. package/error-pages/500.html +10 -11
  89. package/error-pages/502.html +12 -13
  90. package/error-pages/503.html +12 -13
  91. package/error-pages/504.html +10 -11
  92. package/error-pages/5xx.html +10 -11
  93. package/error-pages/challenge.html +12 -13
  94. package/error-pages/managed-challenge.html +12 -13
  95. package/js/tabs.js +427 -88
  96. package/package.json +1 -1
  97. package/scss/Atom/BaseTypography/Blockquote/blockquote.scss +1 -8
  98. package/scss/Atom/BaseTypography/Cite/cite.scss +2 -2
  99. package/scss/Atom/Images/AuthorImage/author-image.scss +4 -4
  100. package/scss/Atom/Images/ImageCaptionCredit/image-caption-credit.scss +24 -28
  101. package/scss/Atom/Images/ImageCredit/image-credit.scss +1 -1
  102. package/scss/Atom/Layout/Container/container.scss +2 -2
  103. package/scss/Atom/Layout/Grid/grid.scss +1 -1
  104. package/scss/Atom/ReachElement/Details/details.scss +6 -6
  105. package/scss/Atom/ReachElement/Figcaption/figcaption.scss +1 -1
  106. package/scss/Atom/Table/table.scss +0 -8
  107. package/scss/Components/Boilerplate/boilerplate.scss +2 -2
  108. package/scss/Components/Breadcrumbs/breadcrumbs.scss +2 -9
  109. package/scss/Components/Buttons/Chips/chips.scss +5 -19
  110. package/scss/Components/Buttons/CtaButton/buttons.scss +3 -124
  111. package/scss/Components/Buttons/CtaButton/cta-button.scss +124 -0
  112. package/scss/Components/Buttons/ShareButtons/share-buttons.scss +2 -2
  113. package/scss/Components/Cards/Card/card.scss +41 -2
  114. package/scss/Components/ErrorPages/error-pages.scss +12 -12
  115. package/scss/Components/Footer/footer.scss +72 -4
  116. package/scss/Components/Forms/Select/select.scss +2 -2
  117. package/scss/Components/Forms/_form-base.scss +5 -5
  118. package/scss/Components/Forms/_form-legacy.scss +1 -1
  119. package/scss/Components/Gallery/gallery.scss +4 -4
  120. package/scss/Components/Hero/hero.scss +18 -17
  121. package/scss/Components/HighlightBox/highlight-box.scss +5 -5
  122. package/scss/Components/MegaMenu/mega-menu.scss +750 -0
  123. package/scss/Components/MegaMenu/megamenu.scss +3 -659
  124. package/scss/Components/PageHeader/page-header.scss +4 -4
  125. package/scss/Components/Pagination/pagination.scss +2 -2
  126. package/scss/Components/SyndicationSearchWidget/SyndicationSearchWidget.scss +3 -1480
  127. package/scss/Components/SyndicationSearchWidget/syndication-search-widget.scss +1515 -0
  128. package/scss/Components/Tab/tab.scss +66 -7
  129. package/scss/Components/TextCta/text-cta.scss +129 -0
  130. package/scss/Components/TextCta/textcta.scss +3 -27
  131. package/scss/Molecules/ImageCaption/image-caption.scss +6 -16
  132. package/scss/Molecules/SectionHeader/section-header.scss +8 -0
  133. package/scss/Molecules/SectionHeader/sectionheader.scss +3 -8
  134. package/scss/Utilities/FullWidth/FullWidth.scss +3 -23
  135. package/scss/Utilities/FullWidth/full-width.scss +23 -0
  136. package/scss/Utilities/Loader/loader.scss +1 -1
  137. package/scss/Utilities/ShowMore/ShowMore.scss +3 -26
  138. package/scss/Utilities/ShowMore/show-more.scss +26 -0
  139. package/scss/assets/scss/_components.scss +14 -9
  140. package/scss/assets/scss/_foundational.scss +13 -7
  141. package/scss/assets/scss/_mixins.scss +9 -314
  142. package/scss/assets/scss/_utility.scss +19 -71
  143. package/scss/assets/scss/_variables-delta.scss +105 -0
  144. package/scss/assets/scss/_variables-irp.scss +1 -1
  145. package/scss/assets/scss/_variables-mcr.scss +1 -1
  146. package/scss/assets/scss/_variables-preventionweb.scss +1 -1
  147. package/scss/assets/scss/_variables.scss +68 -34
  148. package/scss/assets/scss/style-delta.scss +8 -0
  149. package/scss/assets/scss/style-gutenberg.scss +2 -2
  150. package/scss/assets/scss/style-irp-legacy.scss +20 -0
  151. package/scss/assets/scss/style-legacy.scss +20 -0
  152. package/scss/assets/scss/style-mcr-legacy.scss +20 -0
  153. package/scss/assets/scss/style-preventionweb-legacy.scss +20 -0
  154. package/scss/Components/BlockquoteComponent/blockquotecomp.scss +0 -31
  155. package/scss/Components/Buttons/CtaLink/cta-link.scss +0 -61
  156. /package/scss/Components/TableOfContents/{TableOfContents.scss → table-of-contents.scss} +0 -0
@@ -1,1480 +1,3 @@
1
- /**
2
- * @file SearchWidget.scss
3
- * @description Styles for the UNDRR Search Widget React component.
4
- *
5
- * Uses BEM naming convention with mg- prefix for Mangrove components.
6
- * Designed to work with the UNDRR theme system.
7
- *
8
- * @see stories/assets/scss/_variables.scss for Mangrove design tokens
9
- */
10
-
11
- // @import "../../assets/scss/variables";
12
-
13
- // Component-specific variables (using Mangrove tokens)
14
- // Colors
15
- $search-primary: $mg-color-interactive;
16
- $search-primary-dark: $mg-color-interactive-active;
17
- $search-chip-bg: $mg-color-blue-50;
18
- $search-chip-hover: $mg-color-blue-100;
19
- $search-text: $mg-color-text;
20
- $search-text-muted: $mg-color-neutral-500;
21
- $search-border: $mg-color-neutral-100;
22
- $search-border-light: $mg-color-neutral-50;
23
- $search-skeleton-bg: $mg-color-neutral-25;
24
- $search-error-bg: $mg-color-red-50;
25
- $search-error-border: $mg-color-red-400;
26
- $search-debug-bg: $mg-color-yellow-light;
27
- $search-debug-text: $mg-color-yellow-dark;
28
-
29
- // Spacing & sizing (component needs rounded corners, base theme has 0)
30
- $search-radius: $mg-spacing-25;
31
- $search-input-padding-x: $mg-spacing-250;
32
-
33
- // Screen reader only utility
34
- .mg-u-sr-only {
35
- position: absolute;
36
- width: 1px;
37
- height: 1px;
38
- padding: 0;
39
- margin: -1px;
40
- overflow: hidden;
41
- clip-path: inset(50%);
42
- white-space: nowrap;
43
- border: 0;
44
- }
45
-
46
- // Main widget container
47
- .mg-search-widget {
48
- font-family: inherit;
49
- line-height: 1.5;
50
- position: relative;
51
- }
52
-
53
- // ========================================
54
- // Loading Progress Bar
55
- // ========================================
56
-
57
- .mg-search__progress {
58
- position: absolute;
59
- top: 0;
60
- left: 0;
61
- right: 0;
62
- height: 3px;
63
- background: $search-border-light;
64
- overflow: hidden;
65
- z-index: 10;
66
- }
67
-
68
- .mg-search__progress-bar {
69
- height: 100%;
70
- width: 30%;
71
- background: linear-gradient(90deg, $search-primary, $search-primary-dark);
72
- animation: mg-search-progress 1.2s ease-in-out infinite;
73
- }
74
-
75
- @keyframes mg-search-progress {
76
- 0% {
77
- transform: translateX(-100%);
78
- }
79
- 50% {
80
- transform: translateX(200%);
81
- }
82
- 100% {
83
- transform: translateX(400%);
84
- }
85
- }
86
-
87
- // Search form
88
- .mg-search__form {
89
- display: flex;
90
- gap: $mg-spacing-50;
91
- margin-bottom: $mg-spacing-100;
92
- }
93
-
94
- .mg-search__input-wrapper {
95
- position: relative;
96
- flex: 1;
97
- }
98
-
99
- .mg-search__input {
100
- width: 100%;
101
- padding: $mg-spacing-75 $search-input-padding-x $mg-spacing-75 $mg-spacing-100;
102
- border: 1px solid $search-border;
103
- border-radius: $search-radius;
104
- transition: border-color 0.2s, box-shadow 0.2s;
105
-
106
- &:focus {
107
- outline: none;
108
- border-color: $search-primary;
109
- box-shadow: 0 0 0 3px rgba($search-primary, 0.15);
110
- }
111
-
112
- &::placeholder {
113
- color: $search-text-muted;
114
- }
115
- }
116
-
117
- .mg-search__clear {
118
- position: absolute;
119
- right: $search-input-padding-x;
120
- top: 50%;
121
- transform: translateY(-50%);
122
- padding: $mg-spacing-25 $mg-spacing-50;
123
- background: none;
124
- border: none;
125
- font-size: $mg-font-size-200;
126
- color: $search-text-muted;
127
- cursor: pointer;
128
- line-height: 1;
129
-
130
- &:hover {
131
- color: $search-text;
132
- }
133
- }
134
-
135
- .mg-search__loading {
136
- position: absolute;
137
- right: $mg-spacing-75;
138
- top: 50%;
139
- transform: translateY(-50%);
140
- width: $mg-spacing-100;
141
- height: $mg-spacing-100;
142
- border: 2px solid $search-border-light;
143
- border-top-color: $search-primary;
144
- border-radius: 50%;
145
- animation: mg-search-spin 0.8s linear infinite;
146
- }
147
-
148
- @keyframes mg-search-spin {
149
- to {
150
- transform: translateY(-50%) rotate(360deg);
151
- }
152
- }
153
-
154
- .mg-search__submit {
155
- display: flex;
156
- align-items: center;
157
- gap: $mg-spacing-50;
158
- padding: $mg-spacing-75 $mg-spacing-150;
159
- font-size: $mg-font-size-100;
160
- font-weight: 500;
161
- color: #fff;
162
- background-color: $search-primary;
163
- border: none;
164
- border-radius: $search-radius;
165
- cursor: pointer;
166
- transition: background-color 0.2s;
167
-
168
- &:hover {
169
- background-color: $search-primary-dark;
170
- }
171
-
172
- &:focus {
173
- outline: none;
174
- box-shadow: 0 0 0 3px rgba($search-primary, 0.3);
175
- }
176
- }
177
-
178
- .mg-search__submit-icon {
179
- display: flex;
180
- align-items: center;
181
- }
182
-
183
- // Submit button loading state
184
- .mg-search__submit--loading {
185
- opacity: 0.85;
186
- cursor: wait;
187
- }
188
-
189
- .mg-search__submit-spinner {
190
- display: inline-block;
191
- width: 16px;
192
- height: 16px;
193
- border: 2px solid rgb(255 255 255 / 0.3);
194
- border-top-color: #fff;
195
- border-radius: 50%;
196
- animation: mg-search-spin 0.7s linear infinite;
197
- }
198
-
199
- // Active filters
200
- .mg-search__active-filters {
201
- display: flex;
202
- flex-wrap: wrap;
203
- align-items: center;
204
- gap: $mg-spacing-50;
205
- margin-bottom: $mg-spacing-100;
206
- padding: $mg-spacing-75;
207
- background: $search-chip-bg;
208
- border-radius: $search-radius;
209
- }
210
-
211
- .mg-search__active-filters-label {
212
- font-weight: 500;
213
- color: $search-text;
214
- margin-right: $mg-spacing-25;
215
- }
216
-
217
- .mg-search__active-filters-list {
218
- display: flex;
219
- flex-wrap: wrap;
220
- gap: $mg-spacing-50;
221
- list-style: none;
222
- margin: 0;
223
- padding: 0;
224
- }
225
-
226
- .mg-search__filter-chip {
227
- display: inline-flex;
228
- align-items: center;
229
- gap: $mg-spacing-50;
230
- padding: $mg-spacing-25 $mg-spacing-50;
231
- color: $search-text;
232
- background: #fff;
233
- border: 1px solid $search-border;
234
- border-radius: $search-radius;
235
- cursor: pointer;
236
- transition: background-color 0.2s, border-color 0.2s;
237
-
238
- &:hover {
239
- background: $search-chip-hover;
240
- border-color: $search-primary;
241
- }
242
-
243
- &:focus {
244
- outline: none;
245
- box-shadow: 0 0 0 2px $search-primary;
246
- }
247
- }
248
-
249
- .mg-search__filter-chip-remove {
250
- font-weight: 900;
251
- }
252
-
253
- .mg-search__clear-all {
254
- padding: $mg-spacing-25 $mg-spacing-75;
255
- color: $search-primary;
256
- background: none;
257
- border: 1px solid $search-primary;
258
- border-radius: $search-radius;
259
- cursor: pointer;
260
- transition: background-color 0.2s, color 0.2s;
261
-
262
- &:hover {
263
- color: #fff;
264
- background: $search-primary;
265
- }
266
- }
267
-
268
- // Content layout
269
- .mg-search__content {
270
- display: flex;
271
- gap: $mg-spacing-200;
272
- }
273
-
274
- .mg-search__main {
275
- flex: 1;
276
- min-width: 0;
277
- }
278
-
279
- .mg-search__sidebar {
280
- width: 280px;
281
- flex-shrink: 0;
282
-
283
- @media (width <= 768px) {
284
- display: none; // TODO: Mobile drawer in Phase 2
285
- }
286
- }
287
-
288
- // Results
289
- .mg-search__results {
290
- transition: opacity 0.2s ease-out;
291
- }
292
-
293
- .mg-search__results-header {
294
- display: flex;
295
- flex-wrap: wrap;
296
- align-items: center;
297
- justify-content: space-between;
298
- gap: $mg-spacing-50;
299
- margin-bottom: $mg-spacing-100;
300
- }
301
-
302
- .mg-search__results-count {
303
- color: $search-text-muted;
304
- margin: 0;
305
-
306
- strong {
307
- color: $search-text;
308
- }
309
- }
310
-
311
- .mg-search__results-time {
312
- color: $search-text-muted;
313
- }
314
-
315
- // Compact filter button (mobile only, in results header)
316
- .mg-search__filter-btn {
317
- display: none; // Hidden on desktop by default
318
- align-items: center;
319
- gap: $mg-spacing-25;
320
- padding: $mg-spacing-50 $mg-spacing-75;
321
- font-size: $mg-font-size-200;
322
- font-weight: 500;
323
- color: $search-primary;
324
- background: transparent;
325
- border: 1px solid $search-border;
326
- border-radius: $search-radius;
327
- cursor: pointer;
328
- transition: background-color 0.15s, border-color 0.15s;
329
- white-space: nowrap;
330
-
331
- &:hover {
332
- background: $search-chip-bg;
333
- border-color: $search-primary;
334
- }
335
-
336
- &:focus-visible {
337
- outline: 2px solid $search-primary;
338
- outline-offset: 2px;
339
- }
340
- }
341
-
342
- .mg-search__filter-btn-icon {
343
- flex-shrink: 0;
344
- }
345
-
346
- .mg-search__filter-btn-badge {
347
- display: inline-flex;
348
- align-items: center;
349
- justify-content: center;
350
- min-width: 18px;
351
- height: 18px;
352
- padding: 0 $mg-spacing-25;
353
- font-size: 0.75rem;
354
- font-weight: 600;
355
- color: #fff;
356
- background: $search-primary;
357
- border-radius: 9px;
358
- }
359
-
360
- .mg-search__results-list {
361
- display: flex;
362
- flex-direction: column;
363
- gap: $mg-spacing-150;
364
- }
365
-
366
- .mg-search__results-more {
367
- margin-top: $mg-spacing-150;
368
- padding: $mg-spacing-100;
369
- font-size: $mg-font-size-200;
370
- color: $search-text-muted;
371
- background: $search-chip-bg;
372
- border-radius: $search-radius;
373
- text-align: center;
374
- }
375
-
376
- .mg-search__results-empty,
377
- .mg-search__results-placeholder {
378
- padding: $mg-spacing-200;
379
- text-align: center;
380
- color: $search-text-muted;
381
-
382
- p {
383
- margin: 0 0 $mg-spacing-50;
384
- }
385
- }
386
-
387
- .mg-search__results-hint {
388
- font-size: $mg-font-size-200;
389
- }
390
-
391
- .mg-search__results-error {
392
- padding: $mg-spacing-100;
393
- background: $search-error-bg;
394
- border: 1px solid $search-error-border;
395
- border-radius: $search-radius;
396
-
397
- p {
398
- margin: 0 0 $mg-spacing-50;
399
-
400
- &:last-child {
401
- margin-bottom: 0;
402
- }
403
- }
404
- }
405
-
406
- // Result item
407
- .mg-search__result {
408
- padding-bottom: $mg-spacing-150;
409
- border-bottom: 1px solid $search-border-light;
410
-
411
- &:last-child {
412
- border-bottom: none;
413
- padding-bottom: 0;
414
- }
415
- }
416
-
417
- .mg-search__result-content {
418
- display: flex;
419
- gap: $mg-spacing-100;
420
- }
421
-
422
- .mg-search__result-image {
423
- flex-shrink: 0;
424
- width: 120px;
425
-
426
- img {
427
- width: 100%;
428
- height: auto;
429
- border-radius: $search-radius;
430
- object-fit: cover;
431
- }
432
-
433
- @media (width <= 480px) {
434
- display: none;
435
- }
436
- }
437
-
438
- .mg-search__result-text {
439
- flex: 1;
440
- min-width: 0;
441
- }
442
-
443
- .mg-search__result-title {
444
- margin: 0 0 $mg-spacing-50;
445
- font-size: $mg-font-size-200;
446
- font-weight: 600;
447
- line-height: 1.3;
448
-
449
- a {
450
- color: $search-primary;
451
- text-decoration: none;
452
-
453
- &:hover {
454
- text-decoration: underline;
455
- }
456
-
457
- em {
458
- font-style: normal;
459
- background: rgba($search-primary, 0.1);
460
- padding: 0 2px;
461
- }
462
- }
463
- }
464
-
465
- .mg-search__result-meta {
466
- display: flex;
467
- flex-wrap: wrap;
468
- gap: $mg-spacing-50;
469
- margin-bottom: $mg-spacing-50;
470
- font-size: $mg-font-size-150;
471
- color: $search-text-muted;
472
- }
473
-
474
- .mg-search__result-type {
475
- padding: $mg-spacing-25 $mg-spacing-50;
476
- background: $search-chip-bg;
477
- border-radius: $search-radius;
478
- text-transform: uppercase;
479
- letter-spacing: 0.025em;
480
- }
481
-
482
- .mg-search__result-domain,
483
- .mg-search__result-date {
484
- &::before {
485
- content: '•';
486
- margin-right: $mg-spacing-50;
487
- color: $search-border;
488
- }
489
- }
490
-
491
- .mg-search__result-snippet {
492
- margin: 0;
493
- font-size: $mg-font-size-150;
494
- color: $search-text;
495
- line-height: 1.6;
496
-
497
- em {
498
- font-style: normal;
499
- background: rgba($search-primary, 0.1);
500
- padding: 0 2px;
501
- }
502
- }
503
-
504
- .mg-search__result-metrics {
505
- display: flex;
506
- flex-wrap: wrap;
507
- gap: $mg-spacing-50;
508
- margin-bottom: $mg-spacing-50;
509
- }
510
-
511
- .mg-search__result-metric {
512
- display: inline-block;
513
- padding: $mg-spacing-25 $mg-spacing-50;
514
- font-size: $mg-font-size-200;
515
- background: $search-debug-bg;
516
- border-radius: $mg-spacing-25;
517
- }
518
-
519
- // Loading skeleton
520
- .mg-search__skeleton {
521
- display: flex;
522
- flex-direction: column;
523
- gap: $mg-spacing-150;
524
- }
525
-
526
- .mg-search__skeleton-item {
527
- padding-bottom: $mg-spacing-150;
528
- border-bottom: 1px solid $search-border-light;
529
- }
530
-
531
- .mg-search__skeleton-title,
532
- .mg-search__skeleton-meta,
533
- .mg-search__skeleton-text {
534
- background: linear-gradient(90deg, $search-skeleton-bg 25%, #e8e8e8 50%, $search-skeleton-bg 75%);
535
- background-size: 200% 100%;
536
- animation: mg-search-shimmer 1.5s infinite;
537
- border-radius: $search-radius;
538
- }
539
-
540
- .mg-search__skeleton-title {
541
- height: $mg-spacing-150;
542
- width: 70%;
543
- margin-bottom: $mg-spacing-75;
544
- }
545
-
546
- .mg-search__skeleton-meta {
547
- height: $mg-spacing-100;
548
- width: 40%;
549
- margin-bottom: $mg-spacing-75;
550
- }
551
-
552
- .mg-search__skeleton-text {
553
- height: $mg-spacing-100;
554
- width: 100%;
555
- margin-bottom: $mg-spacing-50;
556
-
557
- &--short {
558
- width: 60%;
559
- }
560
- }
561
-
562
- @keyframes mg-search-shimmer {
563
- 0% {
564
- background-position: 200% 0;
565
- }
566
- 100% {
567
- background-position: -200% 0;
568
- }
569
- }
570
-
571
- // Facets placeholder
572
- .mg-search__facets-placeholder {
573
- padding: $mg-spacing-100;
574
- background: $search-chip-bg;
575
- border-radius: $search-radius;
576
- }
577
-
578
- .mg-search__facets-notice {
579
- margin: 0;
580
- font-size: $mg-font-size-200;
581
- color: $search-text-muted;
582
- text-align: center;
583
- }
584
-
585
- // ========================================
586
- // Facets Sidebar
587
- // ========================================
588
-
589
- .mg-search__facets {
590
- display: flex;
591
- flex-direction: column;
592
- gap: $mg-spacing-150;
593
- }
594
-
595
- .mg-search__facets-loading {
596
- padding: $mg-spacing-100;
597
- font-size: $mg-font-size-200;
598
- color: $search-text-muted;
599
- text-align: center;
600
- }
601
-
602
- .mg-search__facet-containers {
603
- display: flex;
604
- flex-direction: column;
605
- gap: $mg-spacing-100;
606
- }
607
-
608
- // Sort Options
609
- .mg-search__sort {
610
- padding: 0;
611
- margin: 0;
612
- border: none;
613
-
614
- legend {
615
- font-weight: 600;
616
- font-size: $mg-font-size-200;
617
- margin-bottom: $mg-spacing-50;
618
- color: $search-text;
619
- }
620
- }
621
-
622
- .mg-search__sort-option {
623
- display: flex;
624
- align-items: center;
625
- gap: $mg-spacing-50;
626
- margin-bottom: $mg-spacing-25;
627
-
628
- input[type="radio"] {
629
- margin: 0;
630
- }
631
-
632
- label {
633
- font-size: $mg-font-size-200;
634
- color: $search-text;
635
- cursor: pointer;
636
- }
637
- }
638
-
639
- // Individual Facet
640
- .mg-search__facet {
641
- padding: 0;
642
- margin: 0;
643
- border: none;
644
-
645
- legend {
646
- font-weight: 600;
647
- font-size: $mg-font-size-200;
648
- margin-bottom: $mg-spacing-50;
649
- color: $search-text;
650
- }
651
- }
652
-
653
- .mg-search__facet-select {
654
- width: 100%;
655
- padding: $mg-spacing-50;
656
- font-size: $mg-font-size-200;
657
- border: 1px solid $search-border;
658
- border-radius: $search-radius;
659
- background-color: #fff;
660
- cursor: pointer;
661
-
662
- &:focus {
663
- outline: none;
664
- border-color: $search-primary;
665
- box-shadow: 0 0 0 2px rgba($search-primary, 0.15);
666
- }
667
-
668
- &[multiple] {
669
- min-height: 100px;
670
-
671
- option {
672
- padding: $mg-spacing-25 $mg-spacing-50;
673
-
674
- &:checked {
675
- background-color: $search-chip-bg;
676
- }
677
- }
678
- }
679
- }
680
-
681
- // Custom facet styling
682
- // .mg-search__facet--custom {
683
- // background: $search-chip-bg;
684
- // padding: $mg-spacing-100;
685
- // border-radius: $search-radius;
686
- // }
687
-
688
- // ========================================
689
- // Result teaser HTML overrides
690
- // ========================================
691
-
692
- // Type badge and site name badges injected before the title in teaser results
693
- .mg-search__result-badges {
694
- display: inline-flex;
695
- flex-wrap: wrap;
696
- align-items: center;
697
- gap: $mg-spacing-50;
698
- margin-bottom: $mg-spacing-25;
699
- }
700
-
701
- // Content type badge — uses the system-level .mg-tag atom.
702
- // No additional styles needed; the class is applied in ResultItem.jsx.
703
-
704
- // Site name label in search results
705
- .mg-search__result-site-name {
706
- display: inline-block;
707
- margin: 0;
708
- padding: $mg-spacing-25 $mg-spacing-50;
709
- font-size: $mg-font-size-200;
710
- color: $search-text-muted;
711
- background: $search-chip-bg;
712
- border-radius: $search-radius;
713
- }
714
-
715
-
716
- // Error result styling
717
- .mg-search__result--error {
718
- padding: $mg-spacing-100;
719
- background: $search-error-bg;
720
- border: 1px solid $search-error-border;
721
- border-radius: $search-radius;
722
- }
723
-
724
- .mg-search__result-error {
725
- margin: 0;
726
- color: #d32f2f;
727
-
728
- a {
729
- color: inherit;
730
- text-decoration: underline;
731
- }
732
- }
733
-
734
- // ========================================
735
- // Teaser Field Visibility
736
- // ========================================
737
- // Modifier classes on the results container hide specific teaser fields
738
- // via the visibleTeaserFields config option.
739
- // Title (.mg-card__title) is intentionally not toggleable.
740
- // Teaser HTML uses standard mg-card__* BEM wrapper classes added by
741
- // Drupal teaser templates (see web-backlog#2660).
742
-
743
- .mg-search--hide-image .mg-card__visual { display: none; }
744
- .mg-search--hide-contentType .mg-card__tag { display: none; }
745
- .mg-search--hide-publicationType .mg-card__publication-type { display: none; }
746
- .mg-search--hide-date .mg-card__date { display: none; }
747
- .mg-search--hide-siteName .mg-search__result-site-name { display: none; }
748
- .mg-search--hide-summary .mg-card__description { display: none; }
749
- .mg-search--hide-organization .mg-card__organization { display: none; }
750
-
751
- // ========================================
752
- // Card Display Mode (mg-grid layout)
753
- // ========================================
754
-
755
- .mg-search__results-grid {
756
- gap: $mg-spacing-150;
757
-
758
- // Card items within grid
759
- > [role="listitem"] {
760
- display: flex;
761
- }
762
-
763
- // Remove list-style dividers in grid/card mode
764
- .mg-search__result {
765
- padding-bottom: 0;
766
- border-bottom: 0;
767
- }
768
- }
769
-
770
- // ========================================
771
- // Result Animations
772
- // Sequential fade-in and slide from left for search results.
773
- // Animation classes applied via JS (which checks prefers-reduced-motion).
774
- // ========================================
775
-
776
- // Initial hidden state - applied before animation
777
- .mg-search__result--pending {
778
- opacity: 0;
779
- transform: translateX(-20px);
780
- }
781
-
782
- // Animated state - triggers the transition
783
- .mg-search__result--visible {
784
- opacity: 1;
785
- transform: translateX(0);
786
- transition: opacity 0.3s ease-out, transform 0.3s ease-out;
787
- }
788
-
789
- // Stale state - dim results while loading new data
790
- .mg-search__results--stale {
791
- opacity: 0.5;
792
- pointer-events: none;
793
- }
794
-
795
- // Stale main area with more visible feedback
796
- .mg-search__main--stale {
797
- position: relative;
798
-
799
- &::after {
800
- content: '';
801
- position: absolute;
802
- inset: 0;
803
- background: rgb(255 255 255 / 0.4);
804
- pointer-events: none;
805
- animation: mg-search-pulse 1.5s ease-in-out infinite;
806
- }
807
- }
808
-
809
- @keyframes mg-search-pulse {
810
- 0%, 100% {
811
- opacity: 0.3;
812
- }
813
- 50% {
814
- opacity: 0.6;
815
- }
816
- }
817
-
818
- // ========================================
819
- // Collapsible Filter Sections
820
- // ========================================
821
-
822
- // Hide overflow items by default (when fieldset doesn't have .facet-expanded)
823
- .mg-search__facet .mg-search__facet-overflow-item {
824
- display: none;
825
- }
826
-
827
- // Show overflow items when expanded
828
- .mg-search__facet--expanded .mg-search__facet-overflow-item {
829
- display: block;
830
- }
831
-
832
- // Toggle button for collapsible sections
833
- .mg-search__facet-toggle {
834
- display: inline-flex;
835
- align-items: center;
836
- gap: $mg-spacing-25;
837
- background: none;
838
- border: none;
839
- padding: $mg-spacing-50 0;
840
- margin-top: $mg-spacing-50;
841
- font-size: $mg-font-size-200;
842
- color: $search-primary;
843
- cursor: pointer;
844
- font-weight: 500;
845
-
846
- &:hover {
847
- text-decoration: underline;
848
- }
849
-
850
- &:focus-visible {
851
- outline: 2px solid $search-primary;
852
- outline-offset: 2px;
853
- }
854
- }
855
-
856
- // Toggle icon (arrow)
857
- .mg-search__facet-toggle-icon {
858
- display: inline-block;
859
- width: 0;
860
- height: 0;
861
- border-left: 5px solid transparent;
862
- border-right: 5px solid transparent;
863
- border-top: 6px solid currentColor;
864
- transition: transform 0.2s ease;
865
-
866
- .mg-search__facet-toggle[aria-expanded="false"] & {
867
- transform: rotate(-90deg);
868
- }
869
-
870
- .mg-search__facet-toggle[aria-expanded="true"] & {
871
- transform: rotate(0deg);
872
- }
873
- }
874
-
875
- // ========================================
876
- // Loading Spinner (full-page initial load)
877
- // ========================================
878
-
879
- .mg-search__loader {
880
- display: flex;
881
- align-items: center;
882
- justify-content: center;
883
- padding: $mg-spacing-200;
884
- }
885
-
886
- .mg-search__spinner {
887
- border: 4px solid $search-border-light;
888
- border-top: 4px solid $search-primary;
889
- border-radius: 50%;
890
- width: 40px;
891
- height: 40px;
892
- animation: mg-search-spin 1s linear infinite;
893
- }
894
-
895
- .mg-search__loader-text {
896
- text-align: center;
897
- color: $search-text-muted;
898
- margin-top: $mg-spacing-100;
899
- }
900
-
901
- // ========================================
902
- // Custom Select Dropdown (replaces Chosen.js)
903
- // ========================================
904
- // Lightweight, self-contained dropdown that works in any environment.
905
- // No external dependencies required.
906
-
907
- .mg-select {
908
- position: relative;
909
- width: 100%;
910
- margin-top: $mg-spacing-50;
911
- }
912
-
913
- .mg-select__trigger {
914
- display: flex;
915
- align-items: center;
916
- justify-content: space-between;
917
- width: 100%;
918
- min-height: 44px; // Touch-friendly
919
- padding: $mg-spacing-50 $mg-spacing-75;
920
- font-size: $mg-font-size-200;
921
- color: $search-text;
922
- text-align: left;
923
- background: #fff;
924
- border: 1px solid $search-border;
925
- border-radius: $search-radius;
926
- cursor: pointer;
927
- transition: border-color 0.15s, box-shadow 0.15s;
928
-
929
- &:hover {
930
- border-color: $search-primary;
931
- }
932
-
933
- &:focus {
934
- outline: none;
935
- border-color: $search-primary;
936
- box-shadow: 0 0 0 2px rgba($search-primary, 0.15);
937
- }
938
-
939
- .mg-select--open & {
940
- border-color: $search-primary;
941
- border-bottom-left-radius: 0;
942
- border-bottom-right-radius: 0;
943
- }
944
- }
945
-
946
- .mg-select__trigger-text {
947
- flex: 1;
948
- overflow: hidden;
949
- text-overflow: ellipsis;
950
- white-space: nowrap;
951
- }
952
-
953
- .mg-select__trigger-icon {
954
- flex-shrink: 0;
955
- margin-left: $mg-spacing-50;
956
- color: $search-text-muted;
957
- transition: transform 0.2s ease;
958
-
959
- .mg-select--open & {
960
- transform: rotate(180deg);
961
- }
962
- }
963
-
964
- .mg-select__backdrop {
965
- position: fixed;
966
- inset: 0;
967
- z-index: 9998; // High z-index since it's portaled to body
968
- background: transparent;
969
- cursor: default;
970
- }
971
-
972
- .mg-select__dropdown {
973
- position: absolute;
974
- top: 100%;
975
- left: 0;
976
- right: 0;
977
- z-index: 9999; // Above backdrop
978
- background: #fff;
979
- border: 1px solid $search-primary;
980
- border-top: none;
981
- border-radius: 0 0 $search-radius $search-radius;
982
- box-shadow: 0 4px 12px rgb(0 0 0 / 0.1);
983
- animation: mg-select-fade-in 0.15s ease-out;
984
- }
985
-
986
- @keyframes mg-select-fade-in {
987
- from {
988
- opacity: 0;
989
- transform: translateY(-4px);
990
- }
991
- to {
992
- opacity: 1;
993
- transform: translateY(0);
994
- }
995
- }
996
-
997
- .mg-select__search {
998
- padding: $mg-spacing-50;
999
- border-bottom: 1px solid $search-border-light;
1000
- }
1001
-
1002
- .mg-select__search-input {
1003
- width: 100%;
1004
- padding: $mg-spacing-50;
1005
- font-size: $mg-font-size-200;
1006
- border: 1px solid $search-border;
1007
- border-radius: $search-radius;
1008
-
1009
- &:focus {
1010
- outline: none;
1011
- border-color: $search-primary;
1012
- }
1013
-
1014
- &::placeholder {
1015
- color: $search-text-muted;
1016
- }
1017
- }
1018
-
1019
- .mg-select__list {
1020
- list-style: none;
1021
- margin: 0;
1022
- padding: $mg-spacing-25 0;
1023
- max-height: 240px;
1024
- overflow-y: auto;
1025
- overscroll-behavior: contain;
1026
- }
1027
-
1028
- .mg-select__option {
1029
- display: flex;
1030
- align-items: center;
1031
- gap: $mg-spacing-50;
1032
- padding: $mg-spacing-50 $mg-spacing-75;
1033
- min-height: 40px; // Touch-friendly
1034
- cursor: pointer;
1035
- transition: background-color 0.1s ease;
1036
-
1037
- &:hover,
1038
- &--highlighted {
1039
- background-color: $search-chip-bg;
1040
- }
1041
-
1042
- &--selected {
1043
- background-color: rgba($search-primary, 0.08);
1044
-
1045
- .mg-select__option-label {
1046
- font-weight: 600;
1047
- color: $search-primary;
1048
- }
1049
- }
1050
-
1051
- &--selected#{&}--highlighted {
1052
- background-color: rgba($search-primary, 0.12);
1053
- }
1054
- }
1055
-
1056
- .mg-select__indicator {
1057
- display: flex;
1058
- align-items: center;
1059
- justify-content: center;
1060
- width: 18px;
1061
- height: 18px;
1062
- flex-shrink: 0;
1063
- border: 2px solid $search-border;
1064
- color: $search-primary;
1065
-
1066
- &--checkbox {
1067
- border-radius: $search-radius;
1068
- }
1069
-
1070
- &--radio {
1071
- border-radius: 50%;
1072
- }
1073
-
1074
- .mg-select__option--selected & {
1075
- border-color: $search-primary;
1076
- background-color: $search-primary;
1077
- color: #fff;
1078
- }
1079
- }
1080
-
1081
- .mg-select__indicator-dot {
1082
- width: 8px;
1083
- height: 8px;
1084
- background: #fff;
1085
- border-radius: 50%;
1086
- }
1087
-
1088
- .mg-select__option-label {
1089
- flex: 1;
1090
- font-size: $mg-font-size-200;
1091
- color: $search-text;
1092
- line-height: 1.4;
1093
- }
1094
-
1095
- .mg-select__option-count {
1096
- flex-shrink: 0;
1097
- font-size: $mg-font-size-100;
1098
- color: $search-text-muted;
1099
- }
1100
-
1101
- // Subtype options (indented children under parent content types)
1102
- .mg-select__option--subtype {
1103
- padding-left: $mg-spacing-150;
1104
-
1105
- .mg-select__option-label {
1106
- font-size: $mg-font-size-100;
1107
-
1108
- // Add visual connector
1109
- &::before {
1110
- content: "└";
1111
- margin-right: $mg-spacing-25;
1112
- color: $search-text-muted;
1113
- }
1114
- }
1115
- }
1116
-
1117
- .mg-select__empty {
1118
- padding: $mg-spacing-100;
1119
- text-align: center;
1120
- color: $search-text-muted;
1121
- font-size: $mg-font-size-200;
1122
- }
1123
-
1124
- // ========================================
1125
- // Enhanced Facet Option Styling
1126
- // ========================================
1127
-
1128
- .mg-search__facet-option {
1129
- display: grid;
1130
- grid-template-columns: 1.25em 1fr auto;
1131
- padding: $mg-spacing-50;
1132
- border-radius: $search-radius;
1133
- align-items: baseline;
1134
- gap: 0 $mg-spacing-25;
1135
- transition: background-color 0.15s ease;
1136
-
1137
- &:hover {
1138
- background-color: rgba($search-primary, 0.05);
1139
- }
1140
-
1141
- input[type="checkbox"],
1142
- input[type="radio"] {
1143
- margin: 0;
1144
- cursor: pointer;
1145
- accent-color: $search-primary;
1146
- }
1147
-
1148
- label {
1149
- padding-left: $mg-spacing-25;
1150
- font-weight: normal;
1151
- text-wrap: balance;
1152
- cursor: pointer;
1153
- line-height: 1.5;
1154
- color: $search-text;
1155
-
1156
- &:hover {
1157
- text-decoration: underline;
1158
- color: $search-primary;
1159
- }
1160
- }
1161
-
1162
- // Selected/checked state
1163
- &:has(input:checked) {
1164
- background-color: rgba($search-primary, 0.08);
1165
-
1166
- label {
1167
- font-weight: 600;
1168
- color: $search-primary;
1169
- }
1170
- }
1171
- }
1172
-
1173
- // Count badges in facets
1174
- .mg-search__facet-count {
1175
- color: $search-text-muted;
1176
- font-size: $mg-font-size-200;
1177
- white-space: nowrap;
1178
- }
1179
-
1180
- // ========================================
1181
- // Mobile Filter Drawer (Left Slide-in)
1182
- // ========================================
1183
- // UX patterns informed by:
1184
- // @see https://www.pencilandpaper.io/articles/ux-pattern-analysis-mobile-filters
1185
- // Key decisions:
1186
- // - Sidebar overlay: Maintains context, click outside to close
1187
- // - Sticky header/footer: Always visible, no scrolling required
1188
- // - 44px minimum touch targets: Finger-friendly interaction
1189
- // - Batch filtering: Apply all filters at once (View Results button)
1190
-
1191
- .mg-search__drawer-backdrop {
1192
- position: fixed;
1193
- inset: 0;
1194
- background: rgb(0 0 0 / 0.5);
1195
- z-index: 1000;
1196
- animation: mg-search-fade-in 0.2s ease-out;
1197
- cursor: pointer; // Indicate clickable to close
1198
- }
1199
-
1200
- @keyframes mg-search-fade-in {
1201
- from {
1202
- opacity: 0;
1203
- }
1204
- to {
1205
- opacity: 1;
1206
- }
1207
- }
1208
-
1209
- .mg-search__drawer {
1210
- position: fixed;
1211
- top: 0;
1212
- left: 0;
1213
- bottom: 0;
1214
- width: min(320px, 85vw); // Max 320px or 85% of viewport
1215
- background: #fff;
1216
- box-shadow: 4px 0 20px rgb(0 0 0 / 0.15);
1217
- display: flex;
1218
- flex-direction: column;
1219
- animation: mg-search-slide-in-left 0.3s ease-out;
1220
- z-index: 1001;
1221
- cursor: default; // Reset cursor inside drawer
1222
- }
1223
-
1224
- @keyframes mg-search-slide-in-left {
1225
- from {
1226
- transform: translateX(-100%);
1227
- }
1228
- to {
1229
- transform: translateX(0);
1230
- }
1231
- }
1232
-
1233
- .mg-search__drawer-header {
1234
- display: flex;
1235
- align-items: center;
1236
- justify-content: space-between;
1237
- padding: $mg-spacing-100 $mg-spacing-150;
1238
- border-bottom: 1px solid $search-border;
1239
- flex-shrink: 0;
1240
- min-height: 56px; // Consistent header height
1241
- }
1242
-
1243
- .mg-search__drawer-title {
1244
- margin: 0;
1245
- font-size: $mg-font-size-300;
1246
- font-weight: 600;
1247
- color: $search-text;
1248
- display: flex;
1249
- align-items: center;
1250
- gap: $mg-spacing-50;
1251
- }
1252
-
1253
- .mg-search__drawer-count {
1254
- display: inline-flex;
1255
- align-items: center;
1256
- justify-content: center;
1257
- min-width: 22px;
1258
- height: 22px;
1259
- padding: 0 $mg-spacing-25;
1260
- font-size: 0.8rem;
1261
- font-weight: 600;
1262
- color: #fff;
1263
- background: $search-primary;
1264
- border-radius: 11px;
1265
- }
1266
-
1267
- .mg-search__drawer-close {
1268
- display: flex;
1269
- align-items: center;
1270
- justify-content: center;
1271
- width: 44px; // Minimum touch target per UX guidelines
1272
- height: 44px;
1273
- padding: 0;
1274
- color: $search-text-muted;
1275
- background: none;
1276
- border: none;
1277
- border-radius: $search-radius;
1278
- cursor: pointer;
1279
- transition: background-color 0.15s, color 0.15s;
1280
-
1281
- &:hover {
1282
- background: $search-chip-bg;
1283
- color: $search-text;
1284
- }
1285
-
1286
- &:focus-visible {
1287
- outline: 2px solid $search-primary;
1288
- outline-offset: -2px;
1289
- }
1290
- }
1291
-
1292
- .mg-search__drawer-content {
1293
- flex: 1;
1294
- overflow-y: auto;
1295
- padding: $mg-spacing-100 $mg-spacing-150;
1296
- -webkit-overflow-scrolling: touch;
1297
- overscroll-behavior: contain; // Prevent scroll chaining
1298
- }
1299
-
1300
- .mg-search__drawer-footer {
1301
- padding: $mg-spacing-100 $mg-spacing-150;
1302
- border-top: 1px solid $search-border;
1303
- flex-shrink: 0;
1304
- background: #fff; // Ensure footer is opaque
1305
- }
1306
-
1307
- .mg-search__drawer-apply {
1308
- display: flex;
1309
- align-items: center;
1310
- justify-content: center;
1311
- gap: $mg-spacing-50;
1312
- width: 100%;
1313
- min-height: 48px; // Touch-friendly height
1314
- padding: $mg-spacing-75 $mg-spacing-100;
1315
- font-size: $mg-font-size-200;
1316
- font-weight: 600;
1317
- color: #fff;
1318
- background: $search-primary;
1319
- border: none;
1320
- border-radius: $search-radius;
1321
- cursor: pointer;
1322
- transition: background-color 0.15s;
1323
-
1324
- &:hover {
1325
- background: $search-primary-dark;
1326
- }
1327
-
1328
- &:focus-visible {
1329
- outline: 2px solid $search-primary-dark;
1330
- outline-offset: 2px;
1331
- }
1332
- }
1333
-
1334
- .mg-search__drawer-apply-count {
1335
- font-weight: 400;
1336
- opacity: 0.9;
1337
- }
1338
-
1339
- // ========================================
1340
- // Mobile Responsive Styles
1341
- // ========================================
1342
-
1343
- @media (width <= 800px) {
1344
- // Show compact filter button in results header
1345
- .mg-search__filter-btn {
1346
- display: inline-flex;
1347
- }
1348
-
1349
- // Hide desktop sidebar
1350
- .mg-search__sidebar {
1351
- display: none;
1352
- }
1353
-
1354
- .mg-search__content {
1355
- flex-direction: column;
1356
- }
1357
- }
1358
-
1359
- @media (width >= 801px) {
1360
- // Hide mobile elements on desktop
1361
- .mg-search__filter-btn {
1362
- display: none;
1363
- }
1364
-
1365
- .mg-search__drawer-backdrop {
1366
- display: none;
1367
- }
1368
- }
1369
-
1370
- // ========================================
1371
- // Accessibility Focus States
1372
- // ========================================
1373
-
1374
- .mg-search__facet-select:focus-visible,
1375
- .mg-search__facet input:focus-visible {
1376
- outline: 2px solid $search-primary;
1377
- outline-offset: 2px;
1378
- }
1379
-
1380
- // ========================================
1381
- // Debug Mode
1382
- // ========================================
1383
-
1384
- .mg-search-debug {
1385
- display: none;
1386
- }
1387
-
1388
- [data-mg-search-debug="true"] .mg-search-debug {
1389
- display: block;
1390
- }
1391
-
1392
- // ========================================
1393
- // Facet Operator Toggle (AND/OR)
1394
- // ========================================
1395
-
1396
- .mg-search__facet-operator {
1397
- display: flex;
1398
- flex-direction: column;
1399
- gap: $mg-spacing-50;
1400
- margin-top: $mg-spacing-75;
1401
- font-size: $mg-font-size-200;
1402
- }
1403
-
1404
- .mg-search__facet-operator-row {
1405
- display: flex;
1406
- align-items: center;
1407
- gap: $mg-spacing-50;
1408
- }
1409
-
1410
- .mg-search__facet-operator-label {
1411
- color: $search-text-muted;
1412
- font-weight: 500;
1413
- }
1414
-
1415
- .mg-search__facet-operator-hint {
1416
- margin: 0;
1417
- color: $search-text-muted;
1418
- font-style: italic;
1419
- line-height: 1.4;
1420
- }
1421
-
1422
- .mg-search__facet-operator-toggle {
1423
- display: inline-flex;
1424
- gap: $mg-spacing-25;
1425
- }
1426
-
1427
- .mg-search__facet-operator-option {
1428
- display: flex;
1429
- align-items: center;
1430
- padding: $mg-spacing-25 $mg-spacing-50;
1431
- cursor: pointer;
1432
- transition: color 0.15s, border-color 0.15s;
1433
- font-weight: 400;
1434
- font-size: $mg-font-size-200;
1435
- user-select: none;
1436
- color: $search-text-muted;
1437
- border-bottom: 2px solid transparent;
1438
- border-radius: 0;
1439
-
1440
- // Hide the actual radio input
1441
- input {
1442
- position: absolute;
1443
- opacity: 0;
1444
- pointer-events: none;
1445
- }
1446
-
1447
- &:hover:not(&--active) {
1448
- color: $search-text;
1449
- }
1450
-
1451
- &--active {
1452
- color: $search-primary;
1453
- font-weight: 500;
1454
- border-bottom-color: $search-primary;
1455
- }
1456
-
1457
- // Focus visible for keyboard navigation
1458
- &:focus-within {
1459
- outline: 2px solid $search-primary;
1460
- outline-offset: 2px;
1461
- border-radius: $search-radius;
1462
- }
1463
- }
1464
-
1465
- // ========================================
1466
- // Active Filter Chip Connector (AND grouping)
1467
- // ========================================
1468
-
1469
- .mg-search__filter-chip-connector {
1470
- display: inline-flex;
1471
- align-items: center;
1472
- margin-right: $mg-spacing-25;
1473
- color: $search-text-muted;
1474
- font-weight: 600;
1475
- text-transform: uppercase;
1476
- letter-spacing: 0.05em;
1477
- }
1478
-
1479
- // Pager styles now live in the standalone Pager component.
1480
- // @see stories/Components/Pager/pager.scss
1
+ // SyndicationSearchWidget.scss — DEPRECATED, use syndication-search-widget.scss
2
+ @import "./syndication-search-widget";
3
+ @warn "SyndicationSearchWidget.scss is deprecated. Import syndication-search-widget.scss instead.";