@pagefind/component-ui 1.5.0-alpha.3

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.
@@ -0,0 +1,1448 @@
1
+ /*
2
+ * Why all the :is(*, #\#) prefixes?
3
+ *
4
+ * These components are embedded in who-knows-what sites with unpredictable CSS.
5
+ * We need our styles to win against host page selectors like `.content p` or
6
+ * `article a:hover` without using !important everywhere.
7
+ *
8
+ * The :is(*, #\#) trick adds ID-level specificity (0,1,0) without requiring
9
+ * an actual ID in the DOM. Chaining it (2x or 3x) builds enough specificity
10
+ * to beat most host selectors.
11
+ *
12
+ * The #\# is an escaped # character, creating an invalid-but-harmless ID
13
+ * selector that never matches, but still contributes specificity via :is().
14
+ *
15
+ * We also need these overrides to only affect the Component UI elements themselves.
16
+ * Users can provide custom templates to the results and searchbox components,
17
+ * and these must inherit their styles without having to fight ours.
18
+ *
19
+ * It's admittedly a bit of a hack but it does provide best effort styling consistency
20
+ * for the Component UI out in the wild.
21
+ */
22
+
23
+ :root {
24
+ --pf-text: #1a1a1a;
25
+ --pf-text-secondary: #666;
26
+ --pf-text-muted: #767676;
27
+ --pf-background: #fff;
28
+ --pf-border: #e0e0e0;
29
+ --pf-border-focus: #999;
30
+ --pf-skeleton: #eee;
31
+ --pf-skeleton-shine: #f5f5f5;
32
+ --pf-hover: #f5f5f5;
33
+ --pf-mark: #1a1a1a;
34
+ --pf-scroll-shadow: rgba(0, 0, 0, 0.08);
35
+
36
+ --pf-shadow-sm: 0 2px 8px rgba(0, 0, 0, 0.06);
37
+ --pf-shadow-md: 0 4px 12px rgba(0, 0, 0, 0.1);
38
+ --pf-shadow-lg: 0 16px 48px rgba(0, 0, 0, 0.2);
39
+
40
+ --pf-error-bg: #fef2f2;
41
+ --pf-error-border: #fecaca;
42
+ --pf-error-text: #dc2626;
43
+ --pf-error-text-secondary: #b91c1c;
44
+
45
+ --pf-outline-focus: #0969da;
46
+ --pf-outline-width: 2px;
47
+ --pf-outline-offset: 2px;
48
+
49
+ --pf-font:
50
+ -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial,
51
+ sans-serif;
52
+
53
+ --pf-input-height: 36px;
54
+ --pf-border-radius: 6px;
55
+ --pf-image-width: 64px;
56
+ --pf-image-height: 48px;
57
+
58
+ --pf-icon-search: url("data:image/svg+xml,%3Csvg width='18' height='18' viewBox='0 0 18 18' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.7549 11.255H11.9649L11.6849 10.985C12.6649 9.845 13.2549 8.365 13.2549 6.755C13.2549 3.165 10.3449 0.255005 6.75488 0.255005C3.16488 0.255005 0.254883 3.165 0.254883 6.755C0.254883 10.345 3.16488 13.255 6.75488 13.255C8.36488 13.255 9.84488 12.665 10.9849 11.685L11.2549 11.965V12.755L16.2549 17.745L17.7449 16.255L12.7549 11.255ZM6.75488 11.255C4.26488 11.255 2.25488 9.245 2.25488 6.755C2.25488 4.26501 4.26488 2.255 6.75488 2.255C9.24488 2.255 11.2549 4.26501 11.2549 6.755C11.2549 9.245 9.24488 11.255 6.75488 11.255Z' fill='%23000000'/%3E%3C/svg%3E%0A");
59
+ --pf-icon-arrow: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' stroke='%23000' stroke-width='1.5' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
60
+
61
+ --pf-dropdown-z-index: 9999;
62
+
63
+ --pf-modal-max-width: 560px;
64
+ --pf-modal-max-height: min(80dvh, 800px);
65
+ --pf-modal-top: 10dvh;
66
+
67
+ --pf-searchbox-max-width: 480px;
68
+ --pf-searchbox-dropdown-max-height: 320px;
69
+
70
+ --pf-dropdown-max-height: 280px;
71
+ }
72
+
73
+ [data-pf-theme="dark"] {
74
+ --pf-text: #e5e5e5;
75
+ --pf-text-secondary: #a0a0a0;
76
+ --pf-text-muted: #949494;
77
+ --pf-background: #1a1a1a;
78
+ --pf-border: #333;
79
+ --pf-border-focus: #555;
80
+ --pf-skeleton: #2a2a2a;
81
+ --pf-skeleton-shine: #333;
82
+ --pf-hover: #252525;
83
+ --pf-mark: #e5e5e5;
84
+ --pf-scroll-shadow: rgba(255, 255, 255, 0.1);
85
+
86
+ --pf-outline-focus: #58a6ff;
87
+
88
+ --pf-shadow-sm: 0 2px 8px rgba(0, 0, 0, 0.3);
89
+ --pf-shadow-md: 0 4px 12px rgba(0, 0, 0, 0.4);
90
+ --pf-shadow-lg: 0 16px 48px rgba(0, 0, 0, 0.5);
91
+
92
+ --pf-error-bg: #2a1a1a;
93
+ --pf-error-border: #5c2828;
94
+ --pf-error-text: #f87171;
95
+ --pf-error-text-secondary: #ef4444;
96
+ }
97
+
98
+ pagefind-config,
99
+ pagefind-filter-dropdown,
100
+ pagefind-filter-pane,
101
+ pagefind-input,
102
+ pagefind-keyboard-hints,
103
+ pagefind-modal,
104
+ pagefind-modal-body,
105
+ pagefind-modal-footer,
106
+ pagefind-modal-header,
107
+ pagefind-modal-trigger,
108
+ pagefind-results,
109
+ pagefind-searchbox,
110
+ pagefind-summary {
111
+ all: initial;
112
+ display: block;
113
+ box-sizing: border-box;
114
+
115
+ /* Typography baseline */
116
+ font-family:
117
+ system-ui,
118
+ -apple-system,
119
+ BlinkMacSystemFont,
120
+ "Segoe UI",
121
+ Roboto,
122
+ sans-serif;
123
+ font-size: 16px;
124
+ line-height: 1.5;
125
+ color: CanvasText;
126
+ contain: layout style;
127
+ }
128
+
129
+ pagefind-searchbox,
130
+ pagefind-filter-dropdown {
131
+ position: relative;
132
+ }
133
+
134
+ pagefind-searchbox:has(.pf-searchbox.open),
135
+ pagefind-filter-dropdown:has(.pf-dropdown-trigger.open) {
136
+ z-index: var(--pf-dropdown-z-index);
137
+ }
138
+
139
+ pagefind-config {
140
+ display: none;
141
+ }
142
+
143
+ pagefind-modal-trigger {
144
+ display: inline-block;
145
+ }
146
+
147
+ :is(*, #\#):is(*, #\#) :is([class^="pf-"], [class*=" pf-"]):not(svg, svg *) {
148
+ all: revert;
149
+ box-sizing: border-box;
150
+ }
151
+
152
+ :is(*, #\#):is(*, #\#):is(*, #\#) [class^="pf-"][hidden],
153
+ :is(*, #\#):is(*, #\#):is(*, #\#) [class*=" pf-"][hidden] {
154
+ display: none;
155
+ }
156
+
157
+ [data-pf-hidden] {
158
+ display: none !important;
159
+ }
160
+
161
+ [data-pf-suppressed] {
162
+ opacity: 0 !important;
163
+ pointer-events: none !important;
164
+ }
165
+
166
+ [data-pf-sr-hidden] {
167
+ clip: rect(0 0 0 0) !important;
168
+ -webkit-clip-path: inset(100%) !important;
169
+ clip-path: inset(100%) !important;
170
+ height: 1px !important;
171
+ overflow: hidden !important;
172
+ position: absolute !important;
173
+ white-space: nowrap !important;
174
+ width: 1px !important;
175
+ }
176
+
177
+ /*
178
+ * Suppress native browser outlines.
179
+ * This is only okay because we exhaustively
180
+ * provide our own high-contrast custom focus styles.
181
+ */
182
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-input:focus,
183
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-input:focus-visible,
184
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-input:focus,
185
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-input:focus-visible,
186
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-input-clear:focus,
187
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-input-clear:focus-visible,
188
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-result-link:focus,
189
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-result-link:focus-visible,
190
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-heading-link:focus,
191
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-heading-link:focus-visible,
192
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-checkbox-input:focus,
193
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-checkbox-input:focus-visible,
194
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-trigger:focus,
195
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-trigger:focus-visible,
196
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-trigger-btn:focus,
197
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-trigger-btn:focus-visible,
198
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-modal-close:focus,
199
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-modal-close:focus-visible,
200
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-result:focus,
201
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-result:focus-visible,
202
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-options:focus,
203
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-options:focus-visible {
204
+ outline: none;
205
+ }
206
+
207
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-input-clear:focus-visible,
208
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-trigger:focus-visible,
209
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-clear:focus-visible,
210
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-trigger-btn:focus-visible,
211
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-modal-close:focus-visible {
212
+ outline: var(--pf-outline-width) solid var(--pf-outline-focus);
213
+ outline-offset: var(--pf-outline-offset);
214
+ }
215
+
216
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-key,
217
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-trigger-key,
218
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-modal-footer-key,
219
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-keyboard-key,
220
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-footer-key {
221
+ display: inline-flex;
222
+ align-items: center;
223
+ justify-content: center;
224
+ padding: 0 4px;
225
+ background: var(--pf-hover);
226
+ border: 1px solid var(--pf-border);
227
+ border-radius: 3px;
228
+ font-weight: 500;
229
+ color: var(--pf-text-secondary);
230
+ font-family: var(--pf-font);
231
+ }
232
+
233
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-key--sm,
234
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-footer-key {
235
+ min-width: 16px;
236
+ height: 16px;
237
+ font-size: 9px;
238
+ padding: 0 3px;
239
+ }
240
+
241
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-input-wrapper {
242
+ position: relative;
243
+ }
244
+
245
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-input-wrapper::before,
246
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-input-wrapper::before {
247
+ content: "";
248
+ position: absolute;
249
+ background-color: var(--pf-text-muted);
250
+ width: 14px;
251
+ height: 14px;
252
+ top: 11px;
253
+ left: 10px;
254
+ -webkit-mask-image: var(--pf-icon-search);
255
+ mask-image: var(--pf-icon-search);
256
+ -webkit-mask-size: 100%;
257
+ mask-size: 100%;
258
+ pointer-events: none;
259
+ }
260
+
261
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-input-wrapper::before {
262
+ z-index: 1;
263
+ }
264
+
265
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-input,
266
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-input {
267
+ width: 100%;
268
+ height: var(--pf-input-height);
269
+ background-color: var(--pf-background);
270
+ border: 1px solid var(--pf-border);
271
+ border-radius: var(--pf-border-radius);
272
+ font-size: 16px; /* Prevents iOS zoom on focus */
273
+ color: var(--pf-text);
274
+ box-sizing: border-box;
275
+ }
276
+
277
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-input {
278
+ padding: 0 36px 0 32px;
279
+ font-weight: 400;
280
+ }
281
+
282
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-input:focus-visible,
283
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-input:focus-visible {
284
+ border-color: var(--pf-outline-focus);
285
+ box-shadow: 0 0 0 var(--pf-outline-width) var(--pf-outline-focus);
286
+ }
287
+
288
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-input::placeholder,
289
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-input::placeholder {
290
+ color: var(--pf-text-muted);
291
+ }
292
+
293
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-input-clear {
294
+ position: absolute;
295
+ right: 2px;
296
+ top: 2px;
297
+ height: calc(100% - 4px);
298
+ min-width: 44px;
299
+ padding: 0 8px;
300
+ background: none;
301
+ border: none;
302
+ font-size: 12px;
303
+ color: var(--pf-text-muted);
304
+ cursor: pointer;
305
+ border-radius: 4px;
306
+ }
307
+
308
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-input-clear:hover {
309
+ background: var(--pf-hover);
310
+ color: var(--pf-text-secondary);
311
+ }
312
+
313
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-input-clear[data-pf-suppressed] {
314
+ display: none;
315
+ }
316
+
317
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-summary {
318
+ font-size: 12px;
319
+ color: var(--pf-text-muted);
320
+ }
321
+
322
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-results {
323
+ list-style: none;
324
+ padding: 0;
325
+ margin: 0;
326
+ display: flex;
327
+ flex-direction: column;
328
+ gap: 8px;
329
+ }
330
+
331
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-result {
332
+ display: flex;
333
+ flex-direction: column;
334
+ gap: 8px;
335
+ }
336
+
337
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-result-card {
338
+ position: relative;
339
+ display: flex;
340
+ gap: 12px;
341
+ padding: 12px;
342
+ background: var(--pf-background);
343
+ border: 1px solid var(--pf-border);
344
+ border-radius: 8px;
345
+ transition:
346
+ border-color 0.15s,
347
+ box-shadow 0.15s;
348
+ }
349
+
350
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-result-card:hover {
351
+ border-color: var(--pf-border-focus);
352
+ box-shadow: var(--pf-shadow-sm);
353
+ }
354
+
355
+ :is(*, #\#):is(*, #\#):is(*, #\#)
356
+ .pf-result-card:has(.pf-result-link:focus-visible) {
357
+ border-color: var(--pf-outline-focus);
358
+ box-shadow: 0 0 0 var(--pf-outline-width) var(--pf-outline-focus);
359
+ }
360
+
361
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-result-card:has([data-pf-selected]) {
362
+ border-color: var(--pf-border-focus);
363
+ background: var(--pf-hover);
364
+ }
365
+
366
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-result-image {
367
+ width: var(--pf-image-width);
368
+ height: var(--pf-image-height);
369
+ border-radius: 4px;
370
+ object-fit: cover;
371
+ background: var(--pf-skeleton);
372
+ flex-shrink: 0;
373
+ }
374
+
375
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-result-content {
376
+ flex: 1;
377
+ min-width: 0;
378
+ }
379
+
380
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-result-title {
381
+ font-size: 14px;
382
+ font-weight: 500;
383
+ margin: 0;
384
+ line-height: 1.4;
385
+ }
386
+
387
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-result-link {
388
+ color: var(--pf-text);
389
+ text-decoration: none;
390
+ }
391
+
392
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-result-link::after {
393
+ content: "";
394
+ position: absolute;
395
+ inset: 0;
396
+ border-radius: inherit;
397
+ }
398
+
399
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-result-link:hover {
400
+ text-decoration: underline;
401
+ }
402
+
403
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-result-excerpt {
404
+ font-size: 13px;
405
+ color: var(--pf-text-secondary);
406
+ margin: 4px 0 0 0;
407
+ line-height: 1.5;
408
+ white-space: nowrap;
409
+ overflow: hidden;
410
+ text-overflow: ellipsis;
411
+ }
412
+
413
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-result-excerpt mark,
414
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-heading-excerpt mark,
415
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-result-excerpt mark {
416
+ background: transparent;
417
+ font-weight: 500;
418
+ }
419
+
420
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-result-excerpt mark,
421
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-result-excerpt mark {
422
+ color: var(--pf-mark);
423
+ }
424
+
425
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-heading-excerpt mark {
426
+ color: var(--pf-text-secondary);
427
+ }
428
+
429
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-skeleton {
430
+ background: var(--pf-skeleton);
431
+ border-radius: 4px;
432
+ }
433
+
434
+ @media (prefers-reduced-motion: no-preference) {
435
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-skeleton {
436
+ background: linear-gradient(
437
+ 90deg,
438
+ var(--pf-skeleton) 25%,
439
+ var(--pf-skeleton-shine) 50%,
440
+ var(--pf-skeleton) 75%
441
+ );
442
+ background-size: 200% 100%;
443
+ animation: pf-shimmer 1.5s infinite;
444
+ }
445
+
446
+ @keyframes pf-shimmer {
447
+ 0% {
448
+ background-position: 200% 0;
449
+ }
450
+ 100% {
451
+ background-position: -200% 0;
452
+ }
453
+ }
454
+ }
455
+
456
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-skeleton-title {
457
+ height: 14px;
458
+ width: 60%;
459
+ margin-bottom: 8px;
460
+ }
461
+
462
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-skeleton-excerpt {
463
+ height: 13px;
464
+ width: 90%;
465
+ }
466
+
467
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-skeleton-image {
468
+ width: var(--pf-image-width);
469
+ height: var(--pf-image-height);
470
+ flex-shrink: 0;
471
+ }
472
+
473
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-empty {
474
+ text-align: center;
475
+ padding: 32px 16px;
476
+ color: var(--pf-text-muted);
477
+ }
478
+
479
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-empty-icon {
480
+ font-size: 24px;
481
+ margin-bottom: 8px;
482
+ opacity: 0.4;
483
+ }
484
+
485
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-empty-text {
486
+ font-size: 14px;
487
+ margin: 0;
488
+ }
489
+
490
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-error {
491
+ padding: 12px 16px;
492
+ background: var(--pf-error-bg);
493
+ border: 1px solid var(--pf-error-border);
494
+ border-radius: var(--pf-border-radius);
495
+ color: var(--pf-error-text);
496
+ font-size: 13px;
497
+ }
498
+
499
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-error strong {
500
+ font-weight: 600;
501
+ }
502
+
503
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-error small {
504
+ display: block;
505
+ margin-top: 4px;
506
+ color: var(--pf-error-text-secondary);
507
+ font-size: 12px;
508
+ }
509
+
510
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-heading-chips {
511
+ display: flex;
512
+ flex-direction: column;
513
+ gap: 6px;
514
+ margin: 0;
515
+ padding: 0;
516
+ padding-left: 12px;
517
+ list-style: none;
518
+ }
519
+
520
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-heading-chip {
521
+ display: inline-flex;
522
+ flex-direction: column;
523
+ gap: 2px;
524
+ padding: 8px 10px;
525
+ background: var(--pf-background);
526
+ border: 1px solid var(--pf-border);
527
+ border-radius: 6px;
528
+ font-size: 12px;
529
+ transition:
530
+ border-color 0.15s,
531
+ box-shadow 0.15s;
532
+ position: relative;
533
+ }
534
+
535
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-heading-chip:hover {
536
+ border-color: var(--pf-border-focus);
537
+ }
538
+
539
+ :is(*, #\#):is(*, #\#):is(*, #\#)
540
+ .pf-heading-chip:has(.pf-heading-link:focus-visible) {
541
+ border-color: var(--pf-outline-focus);
542
+ box-shadow: 0 0 0 var(--pf-outline-width) var(--pf-outline-focus);
543
+ }
544
+
545
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-heading-chip:has([data-pf-selected]) {
546
+ border-color: var(--pf-border-focus);
547
+ background: var(--pf-hover);
548
+ }
549
+
550
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-heading-link {
551
+ color: var(--pf-text);
552
+ font-weight: 500;
553
+ text-decoration: none;
554
+ line-height: 1.3;
555
+ }
556
+
557
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-heading-link::before {
558
+ content: "#";
559
+ color: var(--pf-text-muted);
560
+ margin-right: 4px;
561
+ }
562
+
563
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-heading-link::after {
564
+ content: "";
565
+ position: absolute;
566
+ inset: 0;
567
+ border-radius: inherit;
568
+ }
569
+
570
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-heading-link:hover {
571
+ text-decoration: underline;
572
+ }
573
+
574
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-heading-excerpt {
575
+ margin: 0;
576
+ font-size: 12px;
577
+ color: var(--pf-text-secondary);
578
+ line-height: 1.4;
579
+ white-space: nowrap;
580
+ overflow: hidden;
581
+ text-overflow: ellipsis;
582
+ }
583
+
584
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-filter-pane {
585
+ display: flex;
586
+ flex-direction: column;
587
+ gap: 20px;
588
+ padding: 16px;
589
+ background: var(--pf-skeleton);
590
+ border-radius: var(--pf-border-radius);
591
+ border: 1px solid var(--pf-border);
592
+ overflow: hidden;
593
+ }
594
+
595
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-filter-group {
596
+ display: flex;
597
+ flex-direction: column;
598
+ gap: 8px;
599
+ border: none;
600
+ padding: 0;
601
+ margin: 0;
602
+ }
603
+
604
+ :is(*, #\#):is(*, #\#):is(*, #\#) details.pf-filter-group {
605
+ display: block;
606
+ }
607
+
608
+ :is(*, #\#):is(*, #\#):is(*, #\#) details.pf-filter-group > .pf-filter-options {
609
+ margin-top: 8px;
610
+ }
611
+
612
+ :is(*, #\#):is(*, #\#):is(*, #\#)
613
+ details.pf-filter-group
614
+ > .pf-filter-fieldset {
615
+ margin-top: 8px;
616
+ }
617
+
618
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-filter-fieldset {
619
+ border: none;
620
+ padding: 0;
621
+ margin: 0;
622
+ }
623
+
624
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-filter-group-title {
625
+ font-size: 11px;
626
+ font-weight: 600;
627
+ text-transform: uppercase;
628
+ letter-spacing: 0.3px;
629
+ color: var(--pf-text-muted);
630
+ margin: 0;
631
+ }
632
+
633
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-filter-group-name,
634
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-trigger-label,
635
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-option-label {
636
+ overflow: hidden;
637
+ text-overflow: ellipsis;
638
+ white-space: nowrap;
639
+ min-width: 0;
640
+ }
641
+
642
+ :is(*, #\#):is(*, #\#):is(*, #\#) summary.pf-filter-group-title {
643
+ cursor: pointer;
644
+ list-style: none;
645
+ display: flex;
646
+ align-items: center;
647
+ padding: 4px 0;
648
+ margin: -4px 0;
649
+ }
650
+
651
+ :is(*, #\#):is(*, #\#):is(*, #\#)
652
+ summary.pf-filter-group-title::-webkit-details-marker {
653
+ display: none;
654
+ }
655
+
656
+ :is(*, #\#):is(*, #\#):is(*, #\#) summary.pf-filter-group-title::after {
657
+ content: "";
658
+ width: 10px;
659
+ height: 6px;
660
+ flex-shrink: 0;
661
+ margin-left: 8px;
662
+ background: var(--pf-text-muted);
663
+ -webkit-mask-image: var(--pf-icon-arrow);
664
+ mask-image: var(--pf-icon-arrow);
665
+ -webkit-mask-size: 100% 100%;
666
+ mask-size: 100% 100%;
667
+ transition: transform 0.15s;
668
+ }
669
+
670
+ :is(*, #\#):is(*, #\#):is(*, #\#)
671
+ details.pf-filter-group:not([open])
672
+ > summary.pf-filter-group-title::after {
673
+ transform: rotate(-90deg);
674
+ }
675
+
676
+ :is(*, #\#):is(*, #\#):is(*, #\#) summary.pf-filter-group-title:hover {
677
+ color: var(--pf-text-secondary);
678
+ }
679
+
680
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-filter-group-count,
681
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-selected-badge {
682
+ display: inline-flex;
683
+ align-items: center;
684
+ justify-content: center;
685
+ background: var(--pf-text);
686
+ color: var(--pf-background);
687
+ font-size: 11px;
688
+ font-weight: 500;
689
+ height: 18px;
690
+ min-width: 18px;
691
+ padding: 0 5px;
692
+ border-radius: 9px;
693
+ flex-shrink: 0;
694
+ box-sizing: border-box;
695
+ font-variant-numeric: tabular-nums;
696
+ }
697
+
698
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-filter-group-count {
699
+ margin-left: auto;
700
+ text-transform: none;
701
+ }
702
+
703
+ :is(*, #\#):is(*, #\#):is(*, #\#):is(*, #\#)
704
+ .pf-filter-group-count[data-pf-hidden],
705
+ :is(*, #\#):is(*, #\#):is(*, #\#):is(*, #\#)
706
+ .pf-dropdown-selected-badge[data-pf-hidden] {
707
+ display: inline-flex !important;
708
+ visibility: hidden;
709
+ }
710
+
711
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-filter-options {
712
+ display: flex;
713
+ flex-direction: column;
714
+ gap: 0;
715
+ }
716
+
717
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-filter-checkbox {
718
+ display: flex;
719
+ align-items: center;
720
+ gap: 8px;
721
+ min-height: 30px;
722
+ cursor: pointer;
723
+ font-size: 13px;
724
+ color: var(--pf-text-secondary);
725
+ }
726
+
727
+ @media (pointer: coarse) {
728
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-filter-checkbox {
729
+ min-height: 44px;
730
+ }
731
+ }
732
+
733
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-filter-checkbox:hover {
734
+ color: var(--pf-text);
735
+ }
736
+
737
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-checkbox-input {
738
+ width: 16px;
739
+ height: 16px;
740
+ margin: 0;
741
+ accent-color: var(--pf-text);
742
+ cursor: pointer;
743
+ color-scheme: light;
744
+ }
745
+
746
+ :is(*, #\#):is(*, #\#):is(*, #\#) [data-pf-theme="dark"] .pf-checkbox-input {
747
+ color-scheme: dark;
748
+ }
749
+
750
+ :is(*, #\#):is(*, #\#):is(*, #\#)
751
+ .pf-filter-checkbox:has(.pf-checkbox-input:focus-visible) {
752
+ outline: var(--pf-outline-width) solid var(--pf-outline-focus);
753
+ outline-offset: var(--pf-outline-offset);
754
+ border-radius: 4px;
755
+ }
756
+
757
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-filter-checkbox-count {
758
+ margin-left: auto;
759
+ font-size: 11px;
760
+ color: var(--pf-text-muted);
761
+ }
762
+
763
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-wrapper {
764
+ position: relative;
765
+ display: inline-flex;
766
+ align-items: center;
767
+ }
768
+
769
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-trigger {
770
+ display: inline-flex;
771
+ align-items: center;
772
+ gap: 8px;
773
+ height: var(--pf-input-height);
774
+ padding: 0 12px;
775
+ background: var(--pf-background);
776
+ border: 1px solid var(--pf-border);
777
+ border-radius: var(--pf-border-radius);
778
+ font-size: 13px;
779
+ color: var(--pf-text-secondary);
780
+ cursor: pointer;
781
+ transition: border-color 0.15s;
782
+ -webkit-appearance: none;
783
+ -moz-appearance: none;
784
+ appearance: none;
785
+ }
786
+
787
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-trigger:hover {
788
+ border-color: var(--pf-border-focus);
789
+ }
790
+
791
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-trigger.open {
792
+ border-color: var(--pf-border-focus);
793
+ }
794
+
795
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-trigger.wrap {
796
+ height: auto;
797
+ min-height: var(--pf-input-height);
798
+ padding-top: 6px;
799
+ padding-bottom: 6px;
800
+ }
801
+
802
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-trigger-label.wrap,
803
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-option-label.wrap {
804
+ white-space: normal;
805
+ line-height: 1.3;
806
+ }
807
+
808
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-arrow {
809
+ width: 10px;
810
+ height: 6px;
811
+ flex-shrink: 0;
812
+ background: var(--pf-text-muted);
813
+ -webkit-mask-image: var(--pf-icon-arrow);
814
+ mask-image: var(--pf-icon-arrow);
815
+ -webkit-mask-size: 100% 100%;
816
+ mask-size: 100% 100%;
817
+ -webkit-mask-repeat: no-repeat;
818
+ mask-repeat: no-repeat;
819
+ }
820
+
821
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-trigger.open .pf-dropdown-arrow {
822
+ transform: rotate(180deg);
823
+ }
824
+
825
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-menu {
826
+ position: absolute;
827
+ top: calc(100% + 4px);
828
+ left: 0;
829
+ min-width: 180px;
830
+ max-height: var(--pf-dropdown-max-height);
831
+ overflow-y: auto;
832
+ border: 1px solid var(--pf-border);
833
+ border-radius: var(--pf-border-radius);
834
+ box-shadow: var(--pf-shadow-md);
835
+ padding: 4px;
836
+ z-index: 100;
837
+
838
+ background:
839
+ /* Top shadow cover (moves with content) */
840
+ linear-gradient(var(--pf-background) 30%, transparent) center top,
841
+ /* Bottom shadow cover (moves with content) */
842
+ linear-gradient(transparent, var(--pf-background) 70%) center bottom,
843
+ /* Top shadow (stays fixed) */
844
+ linear-gradient(var(--pf-scroll-shadow), transparent) center top,
845
+ /* Bottom shadow (stays fixed) */
846
+ linear-gradient(transparent, var(--pf-scroll-shadow)) center bottom,
847
+ var(--pf-background);
848
+ background-size:
849
+ 100% 40px,
850
+ 100% 40px,
851
+ 100% 14px,
852
+ 100% 14px,
853
+ 100% 100%;
854
+ background-repeat: no-repeat;
855
+ background-attachment: local, local, scroll, scroll, scroll;
856
+ }
857
+
858
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-option {
859
+ display: flex;
860
+ align-items: center;
861
+ gap: 8px;
862
+ padding: 12px 10px;
863
+ min-height: 44px;
864
+ font-size: 13px;
865
+ color: var(--pf-text-secondary);
866
+ border-radius: 4px;
867
+ cursor: pointer;
868
+ box-sizing: border-box;
869
+ }
870
+
871
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-option:hover {
872
+ background: var(--pf-hover);
873
+ }
874
+
875
+ :is(*, #\#):is(*, #\#):is(*, #\#)
876
+ .pf-dropdown-option.pf-dropdown-option-focused {
877
+ outline: var(--pf-outline-width) solid var(--pf-outline-focus);
878
+ outline-offset: -2px;
879
+ }
880
+
881
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-option.wrap {
882
+ align-items: flex-start;
883
+ }
884
+
885
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-checkbox {
886
+ width: 16px;
887
+ height: 16px;
888
+ flex-shrink: 0;
889
+ border: 1px solid var(--pf-border);
890
+ border-radius: 3px;
891
+ background: var(--pf-background);
892
+ position: relative;
893
+ }
894
+
895
+ :is(*, #\#):is(*, #\#):is(*, #\#)
896
+ .pf-dropdown-option.wrap
897
+ .pf-dropdown-checkbox {
898
+ margin-top: 2px;
899
+ }
900
+
901
+ :is(*, #\#):is(*, #\#):is(*, #\#)
902
+ .pf-dropdown-option[aria-selected="true"]
903
+ .pf-dropdown-checkbox {
904
+ background: var(--pf-text);
905
+ border-color: var(--pf-text);
906
+ }
907
+
908
+ :is(*, #\#):is(*, #\#):is(*, #\#)
909
+ .pf-dropdown-option[aria-selected="true"]
910
+ .pf-dropdown-checkbox::after {
911
+ content: "";
912
+ position: absolute;
913
+ left: 5px;
914
+ top: 2px;
915
+ width: 4px;
916
+ height: 8px;
917
+ border: solid var(--pf-background);
918
+ border-width: 0 2px 2px 0;
919
+ transform: rotate(45deg);
920
+ }
921
+
922
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-option-label {
923
+ flex: 1;
924
+ }
925
+
926
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-option-count {
927
+ margin-left: auto;
928
+ font-size: 11px;
929
+ color: var(--pf-text-muted);
930
+ flex-shrink: 0;
931
+ }
932
+
933
+ :is(*, #\#):is(*, #\#):is(*, #\#)
934
+ .pf-dropdown-option.wrap
935
+ .pf-dropdown-option-count {
936
+ margin-top: 2px;
937
+ }
938
+
939
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-option-loading {
940
+ pointer-events: none;
941
+ }
942
+
943
+ :is(*, #\#):is(*, #\#):is(*, #\#)
944
+ .pf-dropdown-option-loading
945
+ .pf-dropdown-checkbox {
946
+ width: 16px;
947
+ height: 16px;
948
+ }
949
+
950
+ :is(*, #\#):is(*, #\#):is(*, #\#)
951
+ .pf-dropdown-option-loading
952
+ .pf-dropdown-option-label {
953
+ height: 13px;
954
+ border-radius: 4px;
955
+ }
956
+
957
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-error {
958
+ padding: 12px 10px;
959
+ font-size: 13px;
960
+ color: var(--pf-error-text);
961
+ }
962
+
963
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-clear {
964
+ display: inline-flex;
965
+ align-items: center;
966
+ height: 44px;
967
+ padding: 0 10px;
968
+ margin-left: 4px;
969
+ background: transparent;
970
+ border: 1px solid transparent;
971
+ border-radius: var(--pf-border-radius);
972
+ font-size: 12px;
973
+ color: var(--pf-text-secondary);
974
+ cursor: pointer;
975
+ }
976
+
977
+ :is(*, #\#):is(*, #\#):is(*, #\#)
978
+ .pf-dropdown-clear:hover:not([aria-disabled="true"]) {
979
+ background: var(--pf-hover);
980
+ border-color: var(--pf-border);
981
+ color: var(--pf-text);
982
+ }
983
+
984
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-clear[aria-disabled="true"] {
985
+ color: var(--pf-text-muted);
986
+ cursor: default;
987
+ opacity: 0.4;
988
+ }
989
+
990
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-options {
991
+ max-height: var(--pf-dropdown-max-height);
992
+ overflow-y: auto;
993
+ }
994
+
995
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-trigger-btn {
996
+ display: inline-flex;
997
+ align-items: center;
998
+ gap: 8px;
999
+ height: var(--pf-input-height);
1000
+ padding: 0 14px;
1001
+ background: var(--pf-background);
1002
+ border: 1px solid var(--pf-border);
1003
+ border-radius: var(--pf-border-radius);
1004
+ font-size: 14px;
1005
+ color: var(--pf-text-muted);
1006
+ cursor: pointer;
1007
+ transition:
1008
+ border-color 0.15s,
1009
+ box-shadow 0.15s;
1010
+ }
1011
+
1012
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-trigger-btn:hover {
1013
+ border-color: var(--pf-border-focus);
1014
+ }
1015
+
1016
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-trigger-icon {
1017
+ width: 14px;
1018
+ height: 14px;
1019
+ background: var(--pf-text-muted);
1020
+ -webkit-mask-image: var(--pf-icon-search);
1021
+ mask-image: var(--pf-icon-search);
1022
+ -webkit-mask-size: 100%;
1023
+ mask-size: 100%;
1024
+ flex-shrink: 0;
1025
+ }
1026
+
1027
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-trigger-text {
1028
+ color: var(--pf-text-muted);
1029
+ }
1030
+
1031
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-trigger-shortcut {
1032
+ display: inline-flex;
1033
+ align-items: center;
1034
+ gap: 2px;
1035
+ margin-left: 8px;
1036
+ }
1037
+
1038
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-trigger-key {
1039
+ min-width: 20px;
1040
+ height: 18px;
1041
+ font-size: 11px;
1042
+ border-radius: 4px;
1043
+ }
1044
+
1045
+ /*
1046
+ NB: Background scrolling is prevented with the overscroll-behavior: contain
1047
+ values below, plus overflow: hidden on the backdrop.
1048
+ As of writing, this only works on Chrome 144. Tracking:
1049
+ https://bugzilla.mozilla.org/show_bug.cgi?id=1837436
1050
+ https://bugs.webkit.org/show_bug.cgi?id=243452
1051
+ */
1052
+
1053
+ :is(*, #\#):is(*, #\#):is(*, #\#) dialog.pf-modal {
1054
+ position: fixed;
1055
+ width: 100%;
1056
+ max-width: var(--pf-modal-max-width);
1057
+ max-height: var(--pf-modal-max-height);
1058
+ margin: var(--pf-modal-top) auto;
1059
+ padding: 0;
1060
+ background: var(--pf-background);
1061
+ border: none;
1062
+ border-radius: 12px;
1063
+ box-shadow: var(--pf-shadow-lg);
1064
+ flex-direction: column;
1065
+ overflow: hidden;
1066
+ overscroll-behavior: contain;
1067
+ }
1068
+
1069
+ :is(*, #\#):is(*, #\#):is(*, #\#) dialog.pf-modal::backdrop {
1070
+ background: rgba(0, 0, 0, 0.5);
1071
+ overflow: hidden;
1072
+ overscroll-behavior: contain;
1073
+ }
1074
+
1075
+ :is(*, #\#):is(*, #\#):is(*, #\#)
1076
+ [data-pf-theme="dark"]
1077
+ dialog.pf-modal::backdrop {
1078
+ background: rgba(0, 0, 0, 0.7);
1079
+ }
1080
+
1081
+ :is(*, #\#):is(*, #\#):is(*, #\#) dialog.pf-modal[open] {
1082
+ display: flex;
1083
+ }
1084
+
1085
+ @media (prefers-reduced-motion: no-preference) {
1086
+ :is(*, #\#):is(*, #\#):is(*, #\#) dialog.pf-modal[open] {
1087
+ animation: pf-modal-appear 0.15s ease-out;
1088
+ }
1089
+
1090
+ @keyframes pf-modal-appear {
1091
+ from {
1092
+ opacity: 0;
1093
+ transform: scale(0.95);
1094
+ }
1095
+ to {
1096
+ opacity: 1;
1097
+ transform: scale(1);
1098
+ }
1099
+ }
1100
+ }
1101
+
1102
+ @media (max-width: 640px) {
1103
+ :is(*, #\#):is(*, #\#):is(*, #\#) dialog.pf-modal[open] {
1104
+ top: 0;
1105
+ left: 0;
1106
+ width: 100vw;
1107
+ height: 100dvh;
1108
+ max-width: none;
1109
+ max-height: none;
1110
+ margin: 0;
1111
+ padding: 0;
1112
+ border-radius: 0;
1113
+ animation: none;
1114
+ }
1115
+
1116
+ :is(*, #\#):is(*, #\#):is(*, #\#) pagefind-modal-header,
1117
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-modal-header {
1118
+ padding-top: max(16px, env(safe-area-inset-top));
1119
+ padding-left: max(16px, env(safe-area-inset-left));
1120
+ padding-right: max(16px, env(safe-area-inset-right));
1121
+ }
1122
+
1123
+ :is(*, #\#):is(*, #\#):is(*, #\#) pagefind-modal-body,
1124
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-modal-body {
1125
+ padding-left: max(16px, env(safe-area-inset-left));
1126
+ padding-right: max(16px, env(safe-area-inset-right));
1127
+ }
1128
+
1129
+ :is(*, #\#):is(*, #\#):is(*, #\#) pagefind-modal-footer,
1130
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-modal-footer {
1131
+ padding-bottom: max(12px, env(safe-area-inset-bottom));
1132
+ padding-left: max(16px, env(safe-area-inset-left));
1133
+ padding-right: max(16px, env(safe-area-inset-right));
1134
+ }
1135
+ }
1136
+
1137
+ :is(*, #\#):is(*, #\#):is(*, #\#) pagefind-modal-header,
1138
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-modal-header {
1139
+ display: flex;
1140
+ align-items: center;
1141
+ gap: 8px;
1142
+ padding: 16px;
1143
+ border-bottom: 1px solid var(--pf-border);
1144
+ flex-shrink: 0;
1145
+ }
1146
+
1147
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-modal-header-content {
1148
+ flex: 1;
1149
+ min-width: 0;
1150
+ }
1151
+
1152
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-modal-close {
1153
+ display: none;
1154
+ align-items: center;
1155
+ justify-content: center;
1156
+ width: 40px;
1157
+ height: 40px;
1158
+ padding: 0;
1159
+ background: transparent;
1160
+ border: none;
1161
+ border-radius: 8px;
1162
+ color: var(--pf-text-secondary);
1163
+ cursor: pointer;
1164
+ flex-shrink: 0;
1165
+ }
1166
+
1167
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-modal-close:hover {
1168
+ background: var(--pf-hover);
1169
+ color: var(--pf-text);
1170
+ }
1171
+
1172
+ @media (max-width: 640px) {
1173
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-modal-close {
1174
+ display: flex;
1175
+ }
1176
+ }
1177
+
1178
+ :is(*, #\#):is(*, #\#):is(*, #\#)
1179
+ pagefind-modal-header
1180
+ .pf-input-wrapper::before,
1181
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-modal-header .pf-input-wrapper::before {
1182
+ top: 11px;
1183
+ }
1184
+
1185
+ :is(*, #\#):is(*, #\#):is(*, #\#) pagefind-modal-header .pf-input,
1186
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-modal-header .pf-input {
1187
+ border: none;
1188
+ background: transparent;
1189
+ font-size: 16px;
1190
+ height: 40px;
1191
+ }
1192
+
1193
+ :is(*, #\#):is(*, #\#):is(*, #\#) pagefind-modal-body,
1194
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-modal-body {
1195
+ flex: 1;
1196
+ overflow-y: auto;
1197
+ overscroll-behavior: contain;
1198
+ padding: 8px 16px 16px;
1199
+ }
1200
+
1201
+ :is(*, #\#):is(*, #\#):is(*, #\#) pagefind-modal-body .pf-summary,
1202
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-modal-body .pf-summary {
1203
+ margin-bottom: 8px;
1204
+ }
1205
+
1206
+ /* Modal body uses the base card styles - only minor adjustments needed */
1207
+ :is(*, #\#):is(*, #\#):is(*, #\#)
1208
+ pagefind-modal-body
1209
+ .pf-result-card:has([data-pf-selected]),
1210
+ :is(*, #\#):is(*, #\#):is(*, #\#)
1211
+ .pf-modal-body
1212
+ .pf-result-card:has([data-pf-selected]) {
1213
+ background: var(--pf-skeleton);
1214
+ }
1215
+
1216
+ :is(*, #\#):is(*, #\#):is(*, #\#) pagefind-modal-footer,
1217
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-modal-footer {
1218
+ padding: 10px 16px;
1219
+ border-top: 1px solid var(--pf-border);
1220
+ display: flex;
1221
+ align-items: center;
1222
+ gap: 16px;
1223
+ font-size: 12px;
1224
+ color: var(--pf-text-muted);
1225
+ flex-shrink: 0;
1226
+ }
1227
+
1228
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-modal-footer-hint,
1229
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-keyboard-hint {
1230
+ display: flex;
1231
+ align-items: center;
1232
+ gap: 6px;
1233
+ }
1234
+
1235
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-modal-footer-key,
1236
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-keyboard-key {
1237
+ min-width: 18px;
1238
+ height: 18px;
1239
+ font-size: 10px;
1240
+ }
1241
+
1242
+ :is(*, #\#):is(*, #\#):is(*, #\#) pagefind-keyboard-hints,
1243
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-keyboard-hints {
1244
+ display: flex;
1245
+ align-items: center;
1246
+ gap: 16px;
1247
+ font-size: 12px;
1248
+ color: var(--pf-text-muted);
1249
+ min-height: 20px;
1250
+ }
1251
+
1252
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox {
1253
+ position: relative;
1254
+ display: inline-block;
1255
+ width: 100%;
1256
+ max-width: var(--pf-searchbox-max-width);
1257
+ }
1258
+
1259
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-input-wrapper {
1260
+ position: relative;
1261
+ }
1262
+
1263
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-input {
1264
+ padding: 0 12px 0 32px;
1265
+ }
1266
+
1267
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox.open .pf-searchbox-input {
1268
+ border-bottom-left-radius: 0;
1269
+ border-bottom-right-radius: 0;
1270
+ border-bottom-color: var(--pf-border);
1271
+ }
1272
+
1273
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-dropdown {
1274
+ display: none;
1275
+ flex-direction: column;
1276
+ position: absolute;
1277
+ top: 100%;
1278
+ left: 0;
1279
+ right: 0;
1280
+ background: var(--pf-background);
1281
+ border: 1px solid var(--pf-border);
1282
+ border-top: none;
1283
+ border-radius: 0 0 var(--pf-border-radius) var(--pf-border-radius);
1284
+ box-shadow: var(--pf-shadow-md);
1285
+ max-height: var(--pf-searchbox-dropdown-max-height);
1286
+ z-index: 100;
1287
+ }
1288
+
1289
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox.open .pf-searchbox-dropdown {
1290
+ display: flex;
1291
+ }
1292
+
1293
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-results {
1294
+ list-style: none;
1295
+ padding: 4px;
1296
+ margin: 0;
1297
+ flex: 1;
1298
+ overflow-y: auto;
1299
+ }
1300
+
1301
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-result {
1302
+ display: block;
1303
+ padding: 12px 10px;
1304
+ min-height: 44px;
1305
+ border-radius: 4px;
1306
+ cursor: pointer;
1307
+ text-decoration: none;
1308
+ color: inherit;
1309
+ box-sizing: border-box;
1310
+ }
1311
+
1312
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-result:hover {
1313
+ background: var(--pf-hover);
1314
+ }
1315
+
1316
+ /* Placeholder skeleton - non-interactive */
1317
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-placeholder {
1318
+ cursor: default;
1319
+ pointer-events: none;
1320
+ }
1321
+
1322
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-placeholder:hover {
1323
+ background: transparent;
1324
+ }
1325
+
1326
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-result[data-pf-selected] {
1327
+ background: var(--pf-hover);
1328
+ outline: var(--pf-outline-width) solid var(--pf-outline-focus);
1329
+ outline-offset: -2px;
1330
+ }
1331
+
1332
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-result-title {
1333
+ font-size: 13px;
1334
+ font-weight: 500;
1335
+ color: var(--pf-text);
1336
+ margin: 0;
1337
+ line-height: 1.3;
1338
+ }
1339
+
1340
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-result-excerpt {
1341
+ font-size: 12px;
1342
+ color: var(--pf-text-secondary);
1343
+ margin: 2px 0 0 0;
1344
+ line-height: 1.4;
1345
+ white-space: nowrap;
1346
+ overflow: hidden;
1347
+ text-overflow: ellipsis;
1348
+ }
1349
+
1350
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-subresult {
1351
+ padding-left: 20px;
1352
+ border-left: 2px solid var(--pf-border);
1353
+ margin-left: 10px;
1354
+ }
1355
+
1356
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-result-meta {
1357
+ display: flex;
1358
+ align-items: center;
1359
+ gap: 6px;
1360
+ margin-top: 4px;
1361
+ }
1362
+
1363
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-footer {
1364
+ padding: 8px 10px;
1365
+ border-top: 1px solid var(--pf-border);
1366
+ display: flex;
1367
+ align-items: center;
1368
+ justify-content: flex-end;
1369
+ gap: 12px;
1370
+ font-size: 11px;
1371
+ color: var(--pf-text-muted);
1372
+ flex-shrink: 0;
1373
+ }
1374
+
1375
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-footer-hint {
1376
+ display: flex;
1377
+ align-items: center;
1378
+ gap: 4px;
1379
+ }
1380
+
1381
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-empty {
1382
+ padding: 20px 10px;
1383
+ text-align: center;
1384
+ color: var(--pf-text-muted);
1385
+ font-size: 13px;
1386
+ }
1387
+
1388
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-loading {
1389
+ padding: 16px 10px;
1390
+ display: flex;
1391
+ align-items: center;
1392
+ justify-content: center;
1393
+ gap: 8px;
1394
+ color: var(--pf-text-muted);
1395
+ font-size: 13px;
1396
+ }
1397
+
1398
+ /* Ensure focus indicators are visible in Windows High Contrast Mode */
1399
+ @media (forced-colors: active) {
1400
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-input:focus-visible,
1401
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-input:focus-visible,
1402
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-input-clear:focus-visible,
1403
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-trigger-btn:focus-visible,
1404
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-modal-close:focus-visible,
1405
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-trigger:focus-visible,
1406
+ :is(*, #\#):is(*, #\#):is(*, #\#)
1407
+ .pf-result-card:has(.pf-result-link:focus-visible),
1408
+ :is(*, #\#):is(*, #\#):is(*, #\#)
1409
+ .pf-heading-chip:has(.pf-heading-link:focus-visible),
1410
+ :is(*, #\#):is(*, #\#):is(*, #\#)
1411
+ .pf-filter-checkbox:has(.pf-checkbox-input:focus-visible),
1412
+ :is(*, #\#):is(*, #\#):is(*, #\#)
1413
+ .pf-dropdown-option.pf-dropdown-option-focused,
1414
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-result[data-pf-selected] {
1415
+ outline: 2px solid CanvasText;
1416
+ outline-offset: 2px;
1417
+ }
1418
+ }
1419
+
1420
+ /* Hide keyboard hints on touch-only devices (no hover capability) */
1421
+ @media (hover: none) {
1422
+ :is(*, #\#):is(*, #\#):is(*, #\#) pagefind-keyboard-hints,
1423
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-keyboard-hints,
1424
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-footer,
1425
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-modal-footer-hint {
1426
+ display: none;
1427
+ }
1428
+ }
1429
+
1430
+ @media (max-width: 640px) {
1431
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-menu {
1432
+ min-width: unset;
1433
+ width: max(180px, calc(100vw - 32px));
1434
+ max-width: calc(100vw - 32px);
1435
+ left: 50%;
1436
+ transform: translateX(-50%);
1437
+ max-height: min(var(--pf-dropdown-max-height), 50vh);
1438
+ }
1439
+
1440
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-dropdown {
1441
+ max-height: min(var(--pf-searchbox-dropdown-max-height), 60vh);
1442
+ }
1443
+
1444
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-filter-pane {
1445
+ padding: 12px;
1446
+ gap: 16px;
1447
+ }
1448
+ }