/ docs-website / src / theme / styles.module.css
styles.module.css
  1  .searchContainer {
  2      position: relative;
  3      width: 300px;
  4      max-width: 100%;
  5  }
  6  
  7  /* Search Button (replaces input in navbar) */
  8  .searchButton {
  9    width: 100%;
 10    padding: 8px 12px;
 11    border: 1px solid var(--ifm-toc-border-color);
 12    border-radius: 4px;
 13    font-size: 16px;
 14    background: var(--ifm-background-color);
 15    cursor: pointer;
 16    display: flex;
 17    align-items: center;
 18    gap: 8px;
 19    transition: border 0.2s;
 20    text-align: left;
 21  }
 22  
 23  .searchButton:hover {
 24    border-color: var(--ifm-color-primary-darkest);
 25  }
 26  
 27  .searchIcon {
 28    font-size: 16px;
 29    opacity: 0.7;
 30  }
 31  
 32  .searchPlaceholder {
 33    color: var(--ifm-font-color-secondary);
 34    flex: 1;
 35  }
 36  
 37  /* Modal Overlay */
 38  .modalOverlay {
 39    position: fixed;
 40    top: 0;
 41    left: 0;
 42    right: 0;
 43    bottom: 0;
 44    background-color: rgba(0, 0, 0, 0.5);
 45    z-index: 9999;
 46    display: flex;
 47    align-items: flex-start;
 48    justify-content: center;
 49    padding-top: 10vh;
 50  }
 51  
 52  /* Modal Content */
 53  .modalContent {
 54    background: white;
 55    border-radius: 12px;
 56    width: 90%;
 57    max-width: 680px;
 58    max-height: 80vh;
 59    display: flex;
 60    flex-direction: column;
 61    box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
 62    overflow: hidden;
 63  }
 64  
 65  /* Modal Header */
 66  .modalHeader {
 67    padding: 24px 24px 16px;
 68    border-bottom: 1px solid var(--ifm-toc-border-color);
 69  }
 70    
 71  .searchInputWrapper {
 72    position: relative;
 73    display: flex;
 74    align-items: center;
 75    margin-bottom: 16px;
 76  }
 77  
 78  .searchIconInput {
 79    position: absolute;
 80    left: 16px;
 81    font-size: 18px;
 82    opacity: 0.5;
 83  }
 84  
 85  .searchInput {
 86    width: 100%;
 87    padding: 14px 40px 14px 46px;
 88    border: 2px solid var(--ifm-toc-border-color);
 89    border-radius: 8px;
 90    font-size: 16px;
 91    outline: none;
 92    transition: border 0.2s;
 93  }
 94  
 95  .searchInput:focus {
 96    border-color: var(--ifm-color-primary-dark);
 97    box-shadow: 0 0 0 3px var(--docusaurus-admonition-tip-bg);
 98  }
 99  
100  .clearButton {
101    position: absolute;
102    right: 12px;
103    background: none;
104    border: none;
105    color: var(--ifm-font-color-secondary);
106    cursor: pointer;
107    font-size: 18px;
108    display: flex;
109    align-items: center;
110    justify-content: center;
111    width: 28px;
112    height: 28px;
113    border-radius: 50%;
114    transition: background-color 0.2s;
115  }
116  
117  .clearButton:hover {
118    background-color: var(--ifm-color-emphasis-100);
119  }
120  
121  .searchingIndicator {
122    position: absolute;
123    right: 46px;
124    color: var(--ifm-font-color-secondary);
125    font-size: 14px;
126  }
127  
128  /* Filter Tabs */
129  .filterTabs {
130    display: flex;
131    gap: 8px;
132    flex-wrap: wrap;
133  }
134  
135  .filterTab {
136    padding: 8px 16px;
137    border: 1px solid var(--ifm-toc-border-color);
138    border-radius: 20px;
139    background: var(--ifm-background-color);
140    color: var(--ifm-font-color-secondary);
141    font-size: 14px;
142    cursor: pointer;
143    display: flex;
144    align-items: center;
145    gap: 6px;
146    transition: all 0.2s;
147    white-space: nowrap;
148  }
149  
150  .filterTab:hover {
151    border-color: var(--ifm-color-primary-light);
152    background-color: var(--ifm-color-secondary-light);
153  }
154  
155  .filterTabActive {
156    background-color: var(--ifm-color-primary-dark);
157    border-color: var(--ifm-color-primary-dark);
158    color: var(--ifm-color-white);
159  }
160  
161  .filterTabActive:hover {
162    background-color: var(--ifm-color-primary-dark);
163    border-color: var(--ifm-color-primary-dark);
164  }
165  
166  /* Modal Body */
167  .modalBody {
168    flex: 1;
169    overflow-y: auto;
170    padding: 16px 0;
171  }
172  
173  /* Empty State */
174  .emptyState {
175    display: flex;
176    flex-direction: column;
177    align-items: center;
178    justify-content: center;
179    padding: 80px 24px;
180    color: var(--ifm-font-color-secondary);
181  }
182  
183  .emptyStateIcon {
184    font-size: 48px;
185    margin-bottom: 16px;
186    opacity: 0.5;
187  }
188  
189  .emptyStateText {
190    font-size: 18px;
191    margin: 0;
192  }
193  
194  /* Loading State */
195  .loadingState {
196    display: flex;
197    flex-direction: column;
198    align-items: center;
199    justify-content: center;
200    padding: 80px 24px;
201    color: var(--ifm-font-color-secondary);
202  }
203  
204  .loadingState p {
205    margin-top: 16px;
206    margin-bottom: 0;
207  }
208  
209  /* No Results State */
210  .noResultsState {
211    padding: 80px 24px;
212    text-align: center;
213  }
214  
215  /* Search Results */
216  .searchResults {
217    padding: 0;
218  }
219  
220  .searchResults ul {
221    list-style: none;
222    padding: 0;
223    margin: 0;
224  }
225  
226  .searchResults li {
227    padding: 16px 24px;
228    cursor: pointer;
229    border-bottom: 1px solid var(--ifm-color-emphasis-100);
230    transition: background-color 0.2s;
231  }
232  
233  .searchResults li:last-child {
234    border-bottom: none;
235  }
236  
237  .searchResults li:hover {
238    background-color: var(--ifm-color-primary-lightest);
239  }
240  
241  .resultTitle a {
242    color: var(--ifm-font-color-base);
243    text-decoration: none;
244  }
245  
246  .resultTitle a:hover {
247    text-decoration: underline;
248  }
249  
250  
251  .resultTitle {
252    font-weight: 500;
253    margin-bottom: 4px;
254    color: var(--ifm-font-color-base);
255  }
256  
257  .resultSnippet {
258    font-size: 12px;
259    color: var(--ifm-font-color-secondary);
260  }
261  
262  .resultSnippet strong {
263    color: var(--ifm-color-primary-darkest);
264    font-weight: 600;
265    background-color: var(--docusaurus-admonition-tip-bg);
266    padding: 0 2px;
267  }
268  .resultSnippet mark {
269    background: var(--ifm-color-primary-lightest);
270    padding: 0 2px;
271    border-radius: 2px;
272  }
273  
274  
275  .noResults {
276    margin: 0;
277    font-size: 16px;
278    color: var(--ifm-font-color-secondary);
279  }
280  
281  .resultMeta {
282    display: flex;
283    gap: 8px;
284    margin: 2px 0 6px;
285    font-size: 12px;
286    color: var(--ifm-font-color-secondary);
287  }
288  
289  .spinner {
290    width: 14px;
291    height: 14px;
292    border: 2px solid var(--ifm-toc-border-color);
293    border-top-color: var(--ifm-color-primary-darkest);
294    border-radius: 50%;
295    animation: spin 0.8s linear infinite;
296    display: inline-block;
297  }
298  
299  @keyframes spin {
300    to { transform: rotate(360deg); }
301  }
302  
303  /* Dark Mode Support */
304  [data-theme="dark"] .searchButton {
305    background: transparent;
306    color: var(--ifm-color-primary-darkest);
307  }
308  
309  [data-theme="dark"] .searchButton:hover {
310    border-color: var(--ifm-color-primary-darkest);
311  }
312  
313  [data-theme="dark"] .searchPlaceholder {
314    color: var(--ifm-font-color-secondary);
315  }
316  
317  [data-theme="dark"] .modalContent {
318    background: var(--ifm-background-color);
319    box-shadow: 0 20px 60px rgba(0, 0, 0, 0.6);
320  }
321  
322  [data-theme="dark"] .modalHeader {
323    border-bottom-color: var(--ifm-toc-border-color);
324  }
325  
326  [data-theme="dark"] .searchInput {
327    background: var(--ifm-background-surface-color);
328    border-color: var(--ifm-toc-border-color);
329    color: var(--ifm-font-color-base);
330  }
331  
332  [data-theme="dark"] .searchInput:focus {
333    border-color: var(--ifm-color-primary-dark);
334  }
335  
336  [data-theme="dark"] .filterTab {
337    background: var(--ifm-background-surface-color);
338    border-color: var(--ifm-toc-border-color);
339    color: var(--ifm-font-color-secondary);
340  }
341  
342  [data-theme="dark"] .filterTab:hover {
343    background-color: var(--ifm-color-emphasis-200);
344    border-color: var(--ifm-color-primary-darkest);
345  }
346  
347  [data-theme="dark"] .filterTabActive {
348    background-color: var(--ifm-color-primary-darkest);
349    color: var(--ifm-font-color-secondary);
350    border-color: var(--ifm-color-primary-darkest);
351  }
352  
353  [data-theme="dark"] .filterTabActive:hover {
354    background-color: var(--ifm-color-primary-light);
355    border-color: var(--ifm-color-primary-light);
356  }
357  
358  [data-theme="dark"] .searchResults li {
359    border-bottom-color: var(--ifm-color-emphasis-200);
360  }
361  
362  [data-theme="dark"] .searchResults li:hover {
363    background-color: var(--ifm-background-surface-color);
364  }
365  
366  [data-theme="dark"] .resultTitle a {
367    color: var(--ifm-font-color-base);
368  }
369  
370  [data-theme="dark"] .resultSnippet {
371    color: var(--ifm-font-color-secondary);
372  }
373  
374  [data-theme="dark"] .clearButton:hover {
375    background-color: var(--ifm-color-emphasis-200);
376  }
377  
378  [data-theme="dark"] .emptyState,
379  [data-theme="dark"] .loadingState,
380  [data-theme="dark"] .noResultsState {
381    color: var(--ifm-font-color-secondary);
382  }
383  
384  [data-theme="dark"] .noResults {
385    color: var(--ifm-font-color-secondary);
386  }
387  
388  /* Modal Footer - Powered by Haystack */
389  .modalFooter {
390    position: sticky;
391    bottom: 0;
392    padding: 12px 24px;
393    border-top: 1px solid var(--ifm-toc-border-color);
394    background: var(--ifm-background-color);
395    display: flex;
396    justify-content: center;
397    align-items: center;
398  }
399  
400  .poweredBy {
401    font-size: 13px;
402    color: var(--ifm-font-color-secondary);
403  }
404  
405  .poweredByLogo {
406    height: 20px;
407    vertical-align: middle;
408    margin-left: 4px;
409  }
410  
411  [data-theme="dark"] .modalFooter {
412    background: var(--ifm-background-color);
413    border-top-color: var(--ifm-toc-border-color);
414  }
415  
416  
417  /* Responsive */
418  @media (max-width: 768px) {
419    .searchContainer {
420      width: 100%;
421    }
422  
423    .modalOverlay {
424      padding-top: 5vh;
425    }
426  
427    .modalContent {
428      width: 95%;
429      max-height: 85vh;
430    }
431  
432    .modalHeader {
433      padding: 16px;
434    }
435  
436    .filterTabs {
437      overflow-x: auto;
438      flex-wrap: nowrap;
439      -webkit-overflow-scrolling: touch;
440      scrollbar-width: none;
441    }
442  
443    .filterTabs::-webkit-scrollbar {
444      display: none;
445    }
446  
447    .filterTab {
448      font-size: 13px;
449      padding: 6px 12px;
450    }
451  
452    .searchResults li {
453      padding: 12px 16px;
454    }
455  
456    .emptyState,
457    .loadingState,
458    .noResultsState {
459      padding: 60px 16px;
460    }
461  }