PageSourceSearch

https://magicpods.app/

html magicpods.app collected 2026-09-24 09:33:33 UTC 207,156 bytes, 5,107 lines download raw bytes

1<!DOCTYPE html>
2<html lang="en-US" itemscope itemtype="http://schema.org/WebPage">
3
4<head>
5	<meta name="generator" content="Hugo 0.165.0">
6	
7	<meta charset="utf-8">
8
9<title>
10  
11    MagicPods — hub of your Bluetooth headphones for Windows
12  
13</title>
14
15
16<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=5">
17
18<meta name="theme-name" content="bigspring-hugo" />
19
20
21
22
23
24
25
26
27<link rel="shortcut icon" href="https://magicpods.app/images/favicon.png" type="image/x-icon">
28<link rel="icon" href="https://magicpods.app/images/favicon.png" type="image/x-icon">
29<link rel="icon" type="image/png" sizes="48x48" href="https://magicpods.app/images/favicon.png">
30<link rel="icon" type="image/png" sizes="96x96" href="https://magicpods.app/images/favicon.png">
31<link rel="apple-touch-icon" sizes="144x144" href="https://magicpods.app/images/favicon.png">
32
33
34
35
36
37
38<link rel="manifest" href="/manifest.webmanifest" />
39<meta
40  name="msapplication-TileColor"
41  content="#0360DD" />
42<meta
43  name="theme-color"
44  content="#fff" />
45
46
47
48
49
50
51
52
53  <base href="https://magicpods.app/" />
54
55
56
57
58
59
60
61  
62
63
64<title>MagicPods — hub of your Bluetooth headphones for Windows</title>
65
66
67
68
69
70
71
72
73
74  
75  
76  
77
78<link rel="canonical" href="https://magicpods.app/" itemprop="url" />
79
80
81
82
83  
84    <link rel="alternate" hreflang="en" href="https://magicpods.app/" />
85  
86    <link rel="alternate" hreflang="ru" href="https://magicpods.app/ru/" />
87  
88  <link rel="alternate" hreflang="x-default" href="https://magicpods.app/" />
89
90
91
92
93
94  <meta
95    name="keywords"
96    content="Bluetooth, Battery, AirPods, Beats, Sony, Airoha, Galaxy  Buds, noise cancellation, Windows, Steam Deck" />
97
98
99
100
101<meta
102  name="description"
103  content="Check AirPods battery on Windows with popup animation, noise control, hotkeys &amp; more. Works offline, private, no ads." />
104
105
106
107  <meta name="author" content="Aleksandr Maslov" />
108
109
110
111
112
113
114  
115  
116
117
118
119
120
121
122
123
124
125
126
127
128  <meta name="twitter:card" content="summary_large_image" />
129  <meta name="twitter:image" content="https://magicpods.app/images/og-image.png" />
130  <meta property="og:image" content="https://magicpods.app/images/og-image.png" />
131
132
133
134
135
136<meta property="og:title" content="MagicPods — hub of your Bluetooth headphones for Windows" />
137<meta property="og:description" content="Check AirPods battery on Windows with popup animation, noise control, hotkeys &amp; more. Works offline, private, no ads." />
138<meta property="og:type" content="website" />
139<meta property="og:url" content="https://magicpods.app/" />
140
141
142<meta name="twitter:title" content="MagicPods — hub of your Bluetooth headphones for Windows" />
143<meta name="twitter:description" content="Check AirPods battery on Windows with popup animation, noise control, hotkeys &amp; more. Works offline, private, no ads." />
144
145
146  <meta name="twitter:site" content="@steam3d" />
147
148
149  <meta name="twitter:creator" content="@steam3d" />
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174	
175	
176	
177<meta http-equiv="x-dns-prefetch-control" content="on" />
178<link rel="preconnect" href="//ajax.googleapis.com" />
179<link
180  rel="preconnect"
181  href="https://fonts.gstatic.com"
182  crossorigin="anonymous" />
183<link rel="preconnect" href="https://use.fontawesome.com" crossorigin />
184<link rel="preconnect" href="//cdnjs.cloudflare.com" />
185<link rel="preconnect" href="//www.googletagmanager.com" />
186<link rel="preconnect" href="//www.google-analytics.com" />
187<link rel="dns-prefetch" href="https://fonts.gstatic.com" />
188<link rel="dns-prefetch" href="https://use.fontawesome.com" />
189<link rel="dns-prefetch" href="//ajax.googleapis.com" />
190<link rel="dns-prefetch" href="//cdnjs.cloudflare.com" />
191<link rel="dns-prefetch" href="//www.googletagmanager.com" />
192<link rel="dns-prefetch" href="//www.google-analytics.com" />
193<link rel="dns-prefetch" href="//fonts.googleapis.com" />
194<link rel="dns-prefetch" href="//connect.facebook.net" />
195<link rel="dns-prefetch" href="//platform.linkedin.com" />
196<link rel="dns-prefetch" href="//platform.twitter.com" />
197
198
199
200
201  
202    
203  
204
205  
206    
207  
208
209  
210    
211  
212
213  
214    
215  
216
217  
218    
219  
220
221
222
223
224
225
226
227
228
229<link rel="stylesheet" href="/css/style.css" /> 
230
231
232	
233</head>
234
235<body>
236	
237	
238	
239
240
241
242	
243	
244	
245	
246	
247<header class="navigation">
248  <div class="container">
249    
250    <nav class="navbar navbar-expand-lg navbar-light">
251      
252      <a class="navbar-brand" href="/">
253        
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273  
274
275
276
277
278  
279  
280    <img
281      fetchpriority="high"
282      decoding="async"
283      src="https://magicpods.app/images/logo.png"
284      alt="MagicPods"
285      class="img img-light"
286      height="auto"
287      width="156" />
288    <img
289      fetchpriority="high"
290      decoding="async"
291      src="https://magicpods.app/images/logo-w.png"
292      alt="MagicPods"
293      class="img img-dark"
294      height="auto"
295      width="156" />
296  
297
298
299
300      </a>
301
302      <div class="d-flex align-items-center">
303        
304        
305        <select class="me-3 border-0 d-inline-block d-lg-none" onchange="location = this.value;">
306          
307          
308          
309          
310          
311          
312          
313          
314          <option id="en" value="/" selected>EN
315          </option>
316          
317          
318          
319          
320          
321          
322          
323          
324          
325          
326          
327          
328          
329          <option id="ru" value="/ru/">RU</option>
330          
331          
332          
333          
334        </select>
335        
336        
337        <button aria-label="navbar toggler" class="navbar-toggler border-0 h4 mb-0" type="button" data-bs-toggle="collapse" aria-expanded="false" data-bs-target="#navigation">
338          <i class="fas fa-bars"></i>
339          <i class="fa-solid fa-xmark"></i>
340        </button>
341
342        
343      </div>
344
345      <div class="collapse navbar-collapse text-center" id="navigation">
346        <ul class="navbar-nav mx-auto">
347          
348          
349          
350          
351          
352          
353          
354          <li class="nav-item ">
355            <a class="nav-link" 
356              href="/buy">Purchase</a>
357          </li>
358          
359          
360          
361          
362          
363          
364          <li class="nav-item ">
365            <a class="nav-link" target="_blank" rel="noopener" 
366              href="https://help.magicpods.app">Help</a>
367          </li>
368          
369          
370          
371          
372          
373          
374          <li class="nav-item dropdown ">
375            <a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
376              More
377            </a>
378            <ul class="dropdown-menu">
379              
380              
381              
382              <li>
383                <a class="dropdown-item " target="_blank" rel="noopener" 
384                href="https://weblate.magicpods.app/engage/magicpods-windows/">Translate</a>
385              </li>
386              
387              
388              
389              <li>
390                <a class="dropdown-item " 
391                href="/magicaap">MagicAAP driver</a>
392              </li>
393              
394              
395              
396              <li>
397                <a class="dropdown-item " 
398                href="/headphones">Supported headphones</a>
399              </li>
400              
401              
402              
403              <li>
404                <a class="dropdown-item " 
405                href="/add-headphones">Help add headphones</a>
406              </li>
407              
408              
409              
410              <li>
411                <a class="dropdown-item " 
412                href="/faq">FAQ</a>
413              </li>
414              
415              
416              
417              <li>
418                <a class="dropdown-item " 
419                href="/blog">Blog and news</a>
420              </li>
421              
422            </ul>
423          </li>
424          
425          
426          
427          
428          
429          
430          <li class="nav-item dropdown dropdown-lg ">
431            <a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
432              Apps
433            </a>
434            <ul class="dropdown-menu">
435              
436              
437              
438              <li>
439                <a class="dropdown-item " 
440                href="/steamdeck"><img class='dropdown-icon' style='width:24px;height:24px;top:9px'  src='/images/apps/magicpods.png'>MagicPods<small class='dropdown-subtitle'>Plugin for Steam Deck</small></a>
441              </li>
442              
443              
444              
445              <li>
446                <a class="dropdown-item " target="_blank" rel="noopener" 
447                href="https://github.com/steam3d/magicblackDecky"><img class='dropdown-icon' style='width:24px;height:24px;top:9px'  src='/images/apps/magicblack.png'>MagicBlack<small class='dropdown-subtitle'>Simple plugin to turn off Steam Deck screen</small></a>
448              </li>
449              
450              
451              
452              <li>
453                <a class="dropdown-item " target="_blank" rel="noopener" 
454                href="https://apps.microsoft.com/store/detail/9N78GWBTW7L5"><img class='dropdown-icon' style='width:24px;height:24px;top:9px'  src='/images/apps/magicselect.png'>MagicSelect<small class='dropdown-subtitle'>Select and copy text from any images</small></a>
455              </li>
456              
457              
458              
459              <li>
460                <a class="dropdown-item " target="_blank" rel="noopener" 
461                href="https://apps.microsoft.com/store/detail/9NGB2P0TSMBF"><img class='dropdown-icon' style='width:24px;height:24px;top:9px'  src='/images/apps/magictranslate.png'>MagicTranslate<small class='dropdown-subtitle'>Translate text with one hotkey</small></a>
462              </li>
463              
464              
465              
466              <li>
467                <a class="dropdown-item " target="_blank" rel="noopener" 
468                href="https://play.google.com/store/apps/details?id=yet.another.dino"><img class='dropdown-icon' style='width:24px;height:24px;top:9px'  src='/images/apps/yad.png'>Yet Another dino<small class='dropdown-subtitle'>Run, jump, and dodge in a dangerous adventure</small></a>
469              </li>
470              
471              
472              
473              <li>
474                <a class="dropdown-item " target="_blank" rel="noopener" 
475                href="https://play.google.com/store/apps/details?id=com.watchfacestudio.twistwatchface"><img class='dropdown-icon' style='width:24px;height:24px;top:9px'  src='/images/apps/watchface.png'>Twist<small class='dropdown-subtitle'>Watchface for Android Wear</small></a>
476              </li>
477              
478              
479              
480              <li>
481                <a class="dropdown-item " target="_blank" rel="noopener" 
482                href="https://play.google.com/store/apps/details?id=com.watchfacestudio.smartminimalismwatchface"><img class='dropdown-icon' style='width:24px;height:24px;top:9px'  src='/images/apps/watchface.png'>Smart minimalism<small class='dropdown-subtitle'>Watchface for Android Wear</small></a>
483              </li>
484              
485            </ul>
486          </li>
487          
488          
489          
490          
491          
492          
493          <li class="nav-item ">
494            <a class="nav-link" target="_blank" rel="noopener" 
495              href="https://discord.com/invite/UyY4PY768V">Discord</a>
496          </li>
497          
498          
499          
500          
501          
502          
503          <li class="nav-item ">
504            <a class="nav-link" 
505              href="/contact">Contact</a>
506          </li>
507          
508          
509        </ul>
510
511        
512        
513        <select class="me-1 border-0 d-none d-lg-inline-block" id="select-language" onchange="location = this.value;">
514          
515          
516          
517          
518          
519          
520          
521          
522          <option id="en" value="/" selected>EN
523          </option>
524          
525          
526          
527          
528          
529          
530          
531          
532          
533          
534          
535          
536          
537          <option id="ru" value="/ru/">RU</option>
538          
539          
540          
541          
542        </select>
543        
544
545        
546
547        
548      </div>
549    </nav>
550  </div>
551</header>
552
553
554
555
556
557
558	<main>
559		
560<link rel="stylesheet" href="https://magicpods.app/css/magic-button.css">
561<link rel="stylesheet" href="https://magicpods.app/css/feature-icon.css">
562
563
564
565<section class="">
566  <div class="container">
567    <div class="row">
568      <div class="col-lg-10 mx-auto text-center">
569        <div class="os-tabs mx-auto mb-5" role="tablist" aria-label="Platform switch">
570          <a
571            class="os-tab is-active"
572            href="/"
573            role="tab"
574            aria-selected="true"
575            >Windows</a
576          >
577          <a
578            class="os-tab"
579            href="/linux/"
580            role="tab"
581            aria-selected="false"
582            >Linux</a
583          >
584        </div>
585        <h1 class="mb-4 pb-2 mx-auto text-center" style="max-width: 992px;">Add a little magic to your AirPods✨</h1>
586        <p class="mb-4">Manage all your Bluetooth headphones on Windows from one place</p>
587        <div class="mb-5">          
588          
589           
590
591
592
593<a class="radient-border js-hover-sparkles" data-sparkles-color="hsl(50deg, 100%, 50%)" href="https://apps.microsoft.com/store/detail/9P6SKKFKSHKM" target="_blank" rel="noopener noreferrer">   
594    <svg width="146" height="32" viewBox="0 0 146 32" fill="none" xmlns="http://www.w3.org/2000/svg">
595<path d="M145.113 22.2779H139.319C139.341 23.0632 139.582 23.6689 140.041 24.0947C140.506 24.5206 141.142 24.7335 141.95 24.7335C142.858 24.7335 143.691 24.4625 144.449 23.9205V25.4719C143.674 25.9586 142.65 26.2019 141.377 26.2019C140.127 26.2019 139.145 25.8175 138.431 25.0488C137.722 24.2745 137.368 23.1877 137.368 21.7884C137.368 20.4666 137.758 19.3908 138.539 18.5612C139.324 17.7261 140.298 17.3085 141.46 17.3085C142.623 17.3085 143.522 17.6819 144.158 18.4285C144.795 19.1752 145.113 20.2122 145.113 21.5395V22.2779ZM143.253 20.9173C143.248 20.226 143.085 19.6895 142.764 19.3079C142.443 18.9207 142 18.7272 141.436 18.7272C140.882 18.7272 140.412 18.929 140.024 19.3328C139.643 19.7365 139.407 20.2647 139.319 20.9173H143.253Z" fill="black"/>
596<path d="M137.214 19.3411C136.981 19.1586 136.647 19.0673 136.209 19.0673C135.639 19.0673 135.164 19.3245 134.782 19.8389C134.4 20.3532 134.209 21.0529 134.209 21.9378V26.0028H132.283V17.5077H134.209V19.2581H134.242C134.43 18.6608 134.718 18.1962 135.105 17.8644C135.498 17.527 135.936 17.3583 136.417 17.3583C136.766 17.3583 137.031 17.4109 137.214 17.516V19.3411Z" fill="black"/>
597<path d="M126.402 26.2019C125.091 26.2019 124.042 25.8065 123.256 25.0156C122.476 24.2192 122.086 23.1656 122.086 21.8548C122.086 20.4279 122.493 19.3134 123.306 18.5115C124.125 17.7095 125.226 17.3085 126.61 17.3085C127.938 17.3085 128.973 17.6984 129.714 18.4783C130.456 19.2581 130.827 20.3394 130.827 21.722C130.827 23.0771 130.425 24.1639 129.623 24.9824C128.826 25.7954 127.753 26.2019 126.402 26.2019ZM126.494 18.8433C125.741 18.8433 125.146 19.106 124.709 19.6314C124.272 20.1569 124.053 20.8814 124.053 21.805C124.053 22.6955 124.275 23.3979 124.717 23.9122C125.16 24.421 125.752 24.6754 126.494 24.6754C127.252 24.6754 127.833 24.4238 128.237 23.9205C128.646 23.4172 128.851 22.701 128.851 21.7718C128.851 20.8371 128.646 20.1154 128.237 19.6065C127.833 19.0977 127.252 18.8433 126.494 18.8433Z" fill="black"/>
598<path d="M121.583 25.9115C121.207 26.0996 120.711 26.1936 120.097 26.1936C118.448 26.1936 117.624 25.4027 117.624 23.8209V19.0175H116.204V17.5076H117.624V15.5414L119.549 14.9939V17.5076H121.583V19.0175H119.549V23.2651C119.549 23.7684 119.641 24.1279 119.823 24.3436C120.006 24.5593 120.31 24.6671 120.736 24.6671C121.063 24.6671 121.345 24.5731 121.583 24.3851V25.9115Z" fill="black"/>
599<path d="M108.513 25.53V23.4974C108.696 23.6634 108.912 23.8127 109.161 23.9454C109.415 24.0782 109.684 24.1915 109.966 24.2856C110.248 24.374 110.53 24.4432 110.812 24.493C111.095 24.5427 111.355 24.5676 111.593 24.5676C112.423 24.5676 113.04 24.4294 113.444 24.1528C113.853 23.8763 114.058 23.4753 114.058 22.9499C114.058 22.6678 113.989 22.4245 113.851 22.2198C113.718 22.0097 113.53 21.8189 113.286 21.6474C113.043 21.476 112.755 21.3128 112.423 21.1579C112.096 20.9975 111.745 20.8316 111.369 20.6602C110.965 20.4445 110.588 20.226 110.24 20.0048C109.891 19.7836 109.587 19.5402 109.327 19.2747C109.072 19.0037 108.87 18.6995 108.721 18.3622C108.577 18.0248 108.505 17.6293 108.505 17.1758C108.505 16.6172 108.629 16.1333 108.878 15.724C109.133 15.3092 109.465 14.9691 109.875 14.7036C110.29 14.4326 110.76 14.2335 111.286 14.1063C111.811 13.9735 112.348 13.9072 112.896 13.9072C114.141 13.9072 115.049 14.0482 115.619 14.3303V16.2798C114.944 15.7931 114.075 15.5498 113.012 15.5498C112.719 15.5498 112.426 15.5774 112.132 15.6327C111.845 15.6881 111.584 15.7793 111.352 15.9065C111.125 16.0337 110.94 16.1969 110.796 16.396C110.652 16.5951 110.58 16.8357 110.58 17.1177C110.58 17.3832 110.635 17.6127 110.746 17.8063C110.857 17.9999 111.017 18.1769 111.228 18.3373C111.443 18.4977 111.703 18.6553 112.008 18.8101C112.318 18.9595 112.675 19.1226 113.079 19.2996C113.494 19.5153 113.884 19.7421 114.249 19.9799C114.62 20.2177 114.944 20.4804 115.22 20.768C115.502 21.0556 115.724 21.3764 115.884 21.7304C116.05 22.0788 116.133 22.477 116.133 22.925C116.133 23.5278 116.012 24.0367 115.768 24.4515C115.525 24.8663 115.195 25.2037 114.78 25.4636C114.371 25.7235 113.898 25.9116 113.361 26.0277C112.824 26.1439 112.257 26.202 111.659 26.202C111.46 26.202 111.214 26.1854 110.92 26.1522C110.633 26.1245 110.337 26.0803 110.032 26.0194C109.728 25.9641 109.44 25.895 109.169 25.812C108.898 25.7291 108.679 25.6351 108.513 25.53Z" fill="black"/>
600<path d="M103.523 25.9115C103.147 26.0996 102.652 26.1936 102.038 26.1936C100.389 26.1936 99.564 25.4027 99.564 23.8209V19.0175H98.1445V17.5076H99.564V15.5414L101.49 14.9939V17.5076H103.523V19.0175H101.49V23.2651C101.49 23.7684 101.581 24.1279 101.764 24.3436C101.946 24.5593 102.251 24.6671 102.677 24.6671C103.003 24.6671 103.285 24.5731 103.523 24.3851V25.9115Z" fill="black"/>
601<path d="M98.1807 14.9939C97.9206 14.8446 97.6245 14.7699 97.2925 14.7699C96.3573 14.7699 95.8896 15.2981 95.8896 16.3545V17.5076H97.8652V19.0175H95.8979V26.0028H93.9722V19.0175H92.5195V17.5076H93.9722V16.1305C93.9722 15.2345 94.2655 14.5294 94.8521 14.015C95.4386 13.4951 96.1719 
60113.2352 97.0518 13.2352C97.5277 13.2352 97.904 13.2877 98.1807 13.3928V14.9939Z" fill="black"/>
602<path d="M87.7754 26.2019C86.4639 26.2019 85.4152 25.8065 84.6294 25.0156C83.8491 24.2192 83.459 23.1656 83.459 21.8548C83.459 20.4279 83.8657 19.3134 84.6792 18.5115C85.4982 17.7095 86.5994 17.3085 87.9829 17.3085C89.311 17.3085 90.3459 17.6984 91.0874 18.4783C91.8289 19.2581 92.1997 20.3394 92.1997 21.722C92.1997 23.0771 91.7985 24.1639 90.9961 24.9824C90.1992 25.7954 89.1257 26.2019 87.7754 26.2019ZM87.8667 18.8433C87.1141 18.8433 86.5192 19.106 86.082 19.6314C85.6449 20.1569 85.4263 20.8814 85.4263 21.805C85.4263 22.6955 85.6476 23.3979 86.0903 23.9122C86.533 24.421 87.1252 24.6754 87.8667 24.6754C88.6248 24.6754 89.2059 24.4238 89.6099 23.9205C90.0194 23.4172 90.2241 22.701 90.2241 21.7718C90.2241 20.8371 90.0194 20.1154 89.6099 19.6065C89.2059 19.0977 88.6248 18.8433 87.8667 18.8433Z" fill="black"/>
603<path d="M76.6475 25.7373V23.9537C77.3669 24.5012 78.161 24.775 79.0298 24.775C80.1919 24.775 80.7729 24.4321 80.7729 23.7463C80.7729 23.5527 80.7231 23.3896 80.6235 23.2568C80.5239 23.1186 80.3883 22.9969 80.2168 22.8918C80.0508 22.7867 79.8516 22.6927 79.6191 22.6097C79.3923 22.5268 79.1377 22.4327 78.8555 22.3277C78.5068 22.1894 78.1914 22.0428 77.9092 21.888C77.6325 21.7331 77.4001 21.5589 77.2119 21.3653C77.0293 21.1662 76.891 20.9422 76.7969 20.6933C76.7028 20.4444 76.6558 20.1541 76.6558 19.8222C76.6558 19.413 76.7526 19.0535 76.9463 18.7438C77.14 18.4285 77.4001 18.1658 77.7266 17.9556C78.0531 17.7399 78.4238 17.5795 78.8389 17.4745C79.2539 17.3638 79.6828 17.3085 80.1255 17.3085C80.9113 17.3085 81.6141 17.4274 82.2339 17.6653V19.3494C81.6362 18.9401 80.95 18.7355 80.1753 18.7355C79.9318 18.7355 79.7104 18.7603 79.5112 18.8101C79.3175 18.8599 79.1515 18.929 79.0132 19.0175C78.8748 19.106 78.7669 19.2139 78.6895 19.3411C78.612 19.4627 78.5732 19.5982 78.5732 19.7476C78.5732 19.9301 78.612 20.085 78.6895 20.2122C78.7669 20.3394 78.8804 20.4527 79.0298 20.5523C79.1847 20.6463 79.3674 20.7348 79.5776 20.8178C79.7935 20.8952 80.0397 20.9809 80.3164 21.075C80.6816 21.2243 81.0081 21.3764 81.2959 21.5312C81.5892 21.6861 81.8382 21.8631 82.043 22.0622C82.2477 22.2558 82.4054 22.4825 82.5161 22.7425C82.6268 22.9969 82.6821 23.3011 82.6821 23.655C82.6821 24.0864 82.5825 24.4625 82.3833 24.7833C82.1841 25.1041 81.9185 25.3696 81.5864 25.5797C81.2544 25.7899 80.8698 25.9447 80.4326 26.0443C80.001 26.1494 79.5444 26.2019 79.063 26.2019C78.1333 26.2019 77.3281 26.0471 76.6475 25.7373Z" fill="black"/>
604<path d="M71.2979 26.2019C69.9863 26.2019 68.9377 25.8065 68.1519 25.0156C67.3716 24.2192 66.9814 23.1656 66.9814 21.8548C66.9814 20.4279 67.3882 19.3134 68.2017 18.5115C69.0207 17.7095 70.1219 17.3085 71.5054 17.3085C72.8335 17.3085 73.8683 17.6984 74.6099 18.4783C75.3514 19.2581 7
6045.7222 20.3394 75.7222 21.722C75.7222 23.0771 75.321 24.1639 74.5186 24.9824C73.7217 25.7954 72.6481 26.2019 71.2979 26.2019ZM71.3892 18.8433C70.6366 18.8433 70.0417 19.106 69.6045 19.6314C69.1673 20.1569 68.9487 20.8814 68.9487 21.805C68.9487 22.6955 69.1701 23.3979 69.6128 23.9122C70.0555 24.421 70.6476 24.6754 71.3892 24.6754C72.1473 24.6754 72.7284 24.4238 73.1323 23.9205C73.5418 23.4172 73.7466 22.701 73.7466 21.7718C73.7466 20.8371 73.5418 20.1154 73.1323 19.6065C72.7284 19.0977 72.1473 18.8433 71.3892 18.8433Z" fill="black"/>
605<path d="M66.8272 19.3411C66.5947 19.1586 66.2599 19.0673 65.8228 19.0673C65.2528 19.0673 64.7769 19.3245 64.395 19.8389C64.0132 20.3532 63.8223 21.0529 63.8223 21.9378V26.0028H61.8965V17.5077H63.8223V19.2581H63.8555C64.0436 18.6608 64.3314 18.1962 64.7188 17.8644C65.1117 17.527 65.5488 17.3583 66.0303 17.3583C66.3789 17.3583 66.6445 17.4109 66.8272 17.516V19.3411Z" fill="black"/>
606<path d="M60.4888 25.6129C59.8081 26.0056 59.0029 26.2019 58.0732 26.2019C56.8115 26.2019 55.7933 25.8092 55.0186 25.0239C54.2438 24.233 53.8564 23.2098 53.8564 21.9543C53.8564 20.5551 54.2715 19.4323 55.1016 18.5861C55.9372 17.7344 57.0522 17.3085 58.4468 17.3085C59.2215 17.3085 59.9049 17.444 60.4971 17.715V19.507C59.9049 19.0645 59.2741 18.8433 58.6045 18.8433C57.791 18.8433 57.1242 19.1198 56.604 19.6729C56.0838 20.2205 55.8237 20.9394 55.8237 21.8299C55.8237 22.7093 56.0672 23.4034 56.5542 23.9122C57.0467 24.421 57.7052 24.6754 58.5298 24.6754C59.2215 24.6754 59.8745 24.4293 60.4888 23.9371V25.6129Z" fill="black"/>
607<path d="M51.4365 15.724C51.1211 15.724 50.8499 15.6217 50.623 15.417C50.4017 15.2124 50.291 14.9524 50.291 14.6372C50.291 14.3219 50.4017 14.0592 50.623 13.8491C50.8499 13.6389 51.1211 13.5338 51.4365 13.5338C51.763 13.5338 52.0397 13.6389 52.2666 13.8491C52.4935 14.0592 52.6069 14.3219 52.6069 14.6372C52.6069 14.9359 52.4935 15.193 52.2666 15.4087C52.0397 15.6189 51.763 15.724 51.4365 15.724ZM52.3911 26.0028H50.4653V17.5076H52.3911V26.0028Z" fill="black"/>
608<path d="M48.252 26.0028H46.293V18.3041C46.293 17.6736 46.3317 16.902 46.4092 15.9895H46.376C46.2542 16.5094 46.1463 16.8827 46.0522 17.1094L42.4995 26.0028H41.1382L37.5771 17.1758C37.4775 16.9159 37.3724 16.5204 37.2617 15.9895H37.2285C37.2728 16.4651 37.2949 17.2422 37.2949 18.3207V26.0028H35.4688V14.1063H38.2495L41.3789 22.029C41.6169 22.6374 41.7718 23.0909 41.8438 23.3896H41.8853C42.09 22.7646 42.256 22.3 42.3833 21.9958L45.5708 14.1063H48.252V26.0028Z" fill="black"/>
609<path d="M128.871 8.82512V7.56607C129.379 7.95257 129.939 8.14582 130.553 8.14582C131.373 8.14582 131.783 7.90376 131.783 7.41966C131.783 7.28302 131.748 7.16785 131.678 7.07416C131.607 6.97656 131.512 6.89067 131.391 6.81649C131.273 6.74231 131.133 6.67595 130.969 6.61738C130.809 6.55882 130.629 6.49246 130.43 6.41828C130.184 6.32068 129.961 6.21722 129.762 6.10791C129.566 5.9986 129.402 5.87562 129.27 5.73898C129.141 5.59843 129.043 5.44032 128.977 5.26464C128.91 5.08895 128.877 4.88399 128.877 4.64975C128.877 4.36085 128.945 4.10709 129.082 3.88846C129.219 3.66593 129.402 3.48049 129.633 3.33214C129.863 3.17988 130.125 3.06666 130.418 2.99249C130.711 2.91441 131.014 2.87537 131.326 2.87537C131.881 2.87537 132.377 2.9593 132.814 3.12718V4.31596C132.393 4.02706 131.908 3.88261 131.361 3.88261C131.189 3.88261 131.033 3.90018 130.893 3.93531C130.756 3.97045 130.639 4.01925 130.541 4.08171C130.443 4.14418 130.367 4.22031 130.312 4.3101C130.258 4.39599 130.23 4.49164 130.23 4.59705C130.23 4.72588 130.258 4.83519 130.312 4.92499C130.367 5.01478 130.447 5.09481 130.553 5.16508C130.662 5.23145 130.791 5.29392 130.939 5.35248C131.092 5.40713 131.266 5.46765 131.461 5.53401C131.719 5.63942 131.949 5.74678 132.152 5.8561C132.359 5.96541 132.535 6.09034 132.68 6.23089C132.824 6.36753 132.936 6.52759 133.014 6.71108C133.092 6.89067 133.131 7.10539 133.131 7.35525C133.131 7.65976 133.061 7.92524 132.92 8.15167C132.779 8.37811 132.592 8.5655 132.357 8.71385C132.123 8.86221 131.852 8.97152 131.543 9.04179C131.238 9.11597 130.916 9.15306 130.576 9.15306C129.92 9.15306 129.352 9.04374 128.871 8.82512Z" fill="black"/>
610<path d="M128.473 3.01587L126.703 9.01247H125.279L124.189 4.94837C124.146 4.79221 124.119 4.61652 124.107 4.42132H124.084C124.076 4.55406 124.041 4.72584 123.979 4.93665L122.795 9.01247H121.4L119.637 3.01587H121.043L122.133 7.33764C122.168 7.46647 122.191 7.63825 122.203 7.85297H122.244C122.256 7.689 122.287 7.51332 122.338 7.32593L123.551 3.01587H124.828L125.9
61006 7.35521C125.941 7.49185 125.967 7.66362 125.982 7.87054H126.023C126.031 7.72609 126.061 7.55431 126.111 7.35521L127.178 3.01587H128.473Z" fill="black"/>
611<path d="M116.133 9.15306C115.207 9.15306 114.467 8.87392 113.912 8.31564C113.361 7.75346 113.086 7.00974 113.086 6.08448C113.086 5.07724 113.373 4.29058 113.947 3.72449C114.525 3.15841 115.303 2.87537 116.279 2.87537C117.217 2.87537 117.947 3.1506 118.471 3.70107C118.994 4.25154 119.256 5.01478 119.256 5.99079C119.256 6.94728 118.973 7.71442 118.406 8.29222C117.844 8.86611 117.086 9.15306 116.133 9.15306ZM116.197 3.95874C115.666 3.95874 115.246 4.14418 114.938 4.51506C114.629 4.88594 114.475 5.39737 114.475 6.04935C114.475 6.6779 114.631 7.17371 114.943 7.53679C115.256 7.89596 115.674 8.07554 116.197 8.07554C116.732 8.07554 117.143 7.89791 117.428 7.54264C117.717 7.18737 117.861 6.6818 117.861 6.02592C117.861 5.36614 117.717 4.85666 117.428 4.49749C117.143 4.13832 116.732 3.95874 116.197 3.95874Z" fill="black"/>
612<path d="M111.937 9.01242H110.577V7.99347H110.554C110.116 8.76647 109.442 9.15297 108.532 9.15297C107.794 9.15297 107.202 8.88554 106.757 8.35069C106.315 7.81193 106.095 7.07992 106.095 6.15467C106.095 5.16304 106.339 4.36857 106.827 3.77125C107.319 3.17394 107.974 2.87528 108.79 2.87528C109.599 2.87528 110.187 3.19931 110.554 3.84738H110.577V0.134644H111.937V9.01242ZM110.595 6.27179V5.48708C110.595 5.06154 110.456 4.70041 110.179 4.40371C109.901 4.107 109.548 3.95865 109.118 3.95865C108.61 3.95865 108.21 4.14799 107.917 4.52668C107.628 4.90538 107.483 5.43047 107.483 6.10196C107.483 6.71099 107.622 7.19314 107.899 7.54841C108.181 7.89977 108.558 8.07545 109.03 8.07545C109.495 8.07545 109.872 7.90563 110.161 7.56598C110.45 7.22242 110.595 6.79103 110.595 6.27179Z" fill="black"/>
613<path d="M105.058 9.01251H103.698V5.63357C103.698 4.51311 103.302 3.95288 102.509 3.95288C102.095 3.95288 101.753 4.10904 101.483 4.42136C101.214 4.72978 101.079 5.12019 101.079 5.59258V9.01251H99.7139V3.01591H101.079V4.01144H101.103C101.552 3.25406 102.2 2.87537 103.048 2.87537C103.7 2.87537 104.198 3.08814 104.542 3.51368C104.886 3.93531 105.058 4.54629 105.058 5.34662V9.01251Z" fill="black"/>
614<path d="M97.499 1.75681C97.2764 1.75681 97.085 1.68459 96.9248 1.54014C96.7686 1.39569 96.6904 1.2122 96.6904 0.989671C96.6904 0.767141 96.7686 0.581699 96.9248 0.433346C97.085 0.284992 97.2764 0.210815 97.499 0.210815C97.7295 0.210815 97.9248 0.284992 98.085 0.433346C98.2451 0.581699 98.3252 0.767141 98.3252 0.989671C98.3252 1.20049 98.2451 1.38203 98.085 1.53428C97.9248 1.68264 97.7295 1.75681 97.499 1.75681ZM98.1729 9.01247H96.8135V3.01587H98.1729V9.01247Z" fill="black"/>
615<path d="M96.04 0.614868L93.7373 9.01245H92.1611L90.5615 3.13883C90.4951 2.88897 90.4541 2.61569 90.4385 2.31898H90.415C90.3955 2.59617 90.3486 2.86555 90.2744 3.12712L88.6689 9.01245H87.0576L84.708 0.614868H86.2373L87.7607 6.76373C87.8232 7.02139 87.8623 7.29077 87.8779 7.57186H87.9072C87.9229 7.37275 87.9775 7.10338 88.0713 6.76373L89.7939 0.614868H91.2295L92.8232 6.81057C92.8779 7.02139 92.9189 7.27125 92.9463 7.56015H92.9697C92.9814 7.36495 93.0264 7.10728 93.1045 6.78715L94.5986 0.614868H96.04Z" fill="black"/>
616<path d="M81.6777 4.31006C81.5137 4.18123 81.2773 4.11681 80.9688 4.11681C80.5664 4.11681 80.2305 4.29835 79.9609 4.66142C79.6914 5.0245 79.5566 5.51836 79.5566 6.143V9.01247H78.1973V3.01587H79.5566V4.2515H79.5801C79.7129 3.82986 79.916 3.50192 80.1895 3.26768C80.4668 3.02953 80.7754 2.91046 81.1152 2.91046C81.3613 2.91046 81.5488 2.94755 81.6777 3.02173V4.31006Z" fill="black"/>
617<path d="M73.9258 9.15306C73 9.15306 72.2598 8.87392 71.7051 8.31564C71.1543 7.75346 70.8789 7.00974 70.8789 6.08448C70.8789 5.07724 71.166 4.29058 71.7402 3.72449C72.3184 3.15841 73.0957 2.87537 74.0723 2.87537C75.0098 2.87537 75.7402 3.1506 76.2637 3.70107C76.7871 4.25154 77.0488 5.01478 77.0488 5.99079C77.0488 6.94728 76.7656 7.71442 76.1992 8.29222C75.6367 8.86611 74.8789 9.15306 73.9258 9.15306ZM73.9902 3.95874C73.459 3.95874 73.0391 4.14418 72.7305 4.51506C72.4219 4.88594 72.2676 5.39737 72.2676 6.04935C72.2676 6.6779 72.4238 7.17371 72.7363 7.53679C73.0488 7.89596 73.4668 8.07554 73.9902 8.07554C74.5254 8.07554 74.9355 7.89791 75.2207 7.54264C75.5098 7.18737 75.6543 6.6818 75.6543 6.02592C75.6543 5.36614 75.5098 4.85666 75.2207 4.49749C74.9355 4.13832 74.5254 3.95874 73.9902 3.95874Z" fill="black"/>
618<path d="M70.7617 1.24148C70.5781 1.13607 70.3691 1.08337 70.1348 1.08337C69.4746 1.08337 69.1445 1.45621 69.1445 2.20188V3.01587H70.5391V4.08167H69.1504V9.01247H67.791V4.08167H66.7656V3.01587H67.791V2.04376C67.791 1.41131 67.998 0.913544 68.4121 0.550469C68.8262 0.18349 69.3438 0 69.9648 0C70.3008 0 70.5664 0.0370883 70.7617 0.111265V1.24148Z" fill="black"/>
619<path d="M63.3721 8.94802C63.1064 9.08076 62.7568 9.14713 62.3232 9.14713C61.1592 9.14713 60.5771 8.58885 60.5771 7.4723V4.08164H59.5752V3.01584H60.5771V1.62795L61.9365 1.24146V3.01584H63.3721V4.08164H61.9365V7.07994C61.9365 7.43521 62.001 7.68897 62.1299 7.84123C62.2588 7.99349 62.4736 8.06961 62.7744 8.06961C63.0049 8.06961 63.2041 8.00325 63.3721 7.87051V8.94802Z" fill="black"/>
620<path d="M57.9932 1.75681C57.7705 1.75681 57.5791 1.68459 57.4189 1.54014C57.2627 1.39569 57.1846 1.2122 57.1846 0.989671C57.1846 0.767141 57.2627 0.581699 57.4189 0.433346C57.5791 0.284992 57.7
620705 0.210815 57.9932 0.210815C58.2236 0.210815 58.4189 0.284992 58.5791 0.433346C58.7393 0.581699 58.8193 0.767141 58.8193 0.989671C58.8193 1.20049 58.7393 1.38203 58.5791 1.53428C58.4189 1.68264 58.2236 1.75681 57.9932 1.75681ZM58.667 9.01247H57.3076V3.01587H58.667V9.01247Z" fill="black"/>
621<path d="M53.3105 8.94802C53.0449 9.08076 52.6953 9.14713 52.2617 9.14713C51.0977 9.14713 50.5156 8.58885 50.5156 7.4723V4.08164H49.5137V3.01584H50.5156V1.62795L51.875 1.24146V3.01584H53.3105V4.08164H51.875V7.07994C51.875 7.43521 51.9395 7.68897 52.0684 7.84123C52.1973 7.99349 52.4121 8.06961 52.7129 8.06961C52.9434 8.06961 53.1426 8.00325 53.3105 7.87051V8.94802Z" fill="black"/>
622<path d="M49.0918 6.38314H45.002C45.0176 6.93752 45.1875 7.36501 45.5117 7.66562C45.8398 7.96623 46.2891 8.11653 46.8594 8.11653C47.5 8.11653 48.0879 7.92524 48.623 7.54264V8.63772C48.0762 8.98128 47.3535 9.15306 46.4551 9.15306C45.5723 9.15306 44.8789 8.88173 44.375 8.33906C43.875 7.7925 43.625 7.02536 43.625 6.03764C43.625 5.10457 43.9004 4.34524 44.4512 3.75963C45.0059 3.17012 45.6934 2.87537 46.5137 2.87537C47.334 2.87537 47.9688 3.13889 48.418 3.66593C48.8672 4.19298 49.0918 4.92499 49.0918 5.86195V6.38314ZM47.7793 5.42275C47.7754 4.93475 47.6602 4.55605 47.4336 4.28668C47.207 4.01339 46.8945 3.87675 46.4961 3.87675C46.1055 3.87675 45.7734 4.01925 45.5 4.30424C45.2305 4.58924 45.0645 4.96207 45.002 5.42275H47.7793Z" fill="black"/>
623<path d="M42.5938 8.4386C41.7188 8.91489 40.7441 9.15304 39.6699 9.15304C38.4277 9.15304 37.4219 8.76654 36.6523 7.99354C35.8828 7.22054 35.498 6.19768 35.498 4.92497C35.498 3.62492 35.918 2.55912 36.7578 1.72756C37.6016 0.892097 38.6719 0.474365 39.9688 0.474365C40.9023 0.474365 41.6875 0.611007 42.3242 0.884289V2.31902C41.6797 1.88958 40.9121 1.67486 40.0215 1.67486C39.127 1.67486 38.3926 1.96961 37.8184 2.55912C37.248 3.14863 36.9629 3.91187 36.9629 4.84884C36.9629 5.81313 37.209 6.57247 37.7012 7.12684C38.1934 7.67731 38.8613 7.95255 39.7051 7.95255C40.2832 7.95255 40.7832 7.84128 41.2051 7.61875V5.62184H39.4355V4.45063H42.5938V8.4386Z" fill="black"/>
624<path d="M12.8698 0.613403H0V13.4146H12.8698V0.613403Z" fill="#F25022"/>
625<path d="M27.0759 0.613281H14.2061V13.4145H27.0759V0.613281Z" fill="#7FBA00"/>
626<path d="M12.8698 14.7283H0V27.5295H12.8698V14.7283Z" fill="#00A4EF"/>
627<path d="M27.0759 14.7283H14.2061V27.5295H27.0759V14.7283Z" fill="#FFB900"/>
628</svg>
629
630</a>
631          
632           
633
634
635
636<a class="radient-border js-hover-sparkles" data-sparkles-color="hsl(50deg, 100%, 50%)" href="/installer/MagicPods.appinstaller"  rel="noopener noreferrer">   
637    <svg width="137" height="32" viewBox="0 0 137 32" fill="none" xmlns="http://www.w3.org/2000/svg">
638<path d="M94.2881 19.3411C94.0557 19.1586 93.7209 19.0673 93.2837 19.0673C92.7137 19.0673 92.2378 19.3245 91.856 19.8389C91.4741 20.3532 91.2832 21.0529 91.2832 21.9378V26.0028H89.3574V17.5077H91.2832V19.2581H91.3164C91.5046 18.6608 91.7923 18.1962 92.1797 17.8644C92.5726 17.527 93.0098 17.3583 93.4912 17.3583C93.8398 17.3583 94.1055 17.4109 94.2881 17.516V19.3411Z" fill="black"/>
639<path d="M88.0327 22.2779H82.2388C82.2609 23.0632 82.5016 23.6689 82.9609 24.0947C83.4258 24.5206 84.0622 24.7335 84.8701 24.7335C85.7777 24.7335 86.6105 24.4625 87.3687 23.9205V25.4719C86.5939 25.9586 85.5701 26.2019 84.2974 26.2019C83.0467 26.2019 82.0645 25.8175 81.3506 25.0488C80.6423 24.2745 80.2881 23.1877 80.2881 21.7884C80.2881 20.4666 80.6782 19.3908 81.4585 18.5612C82.2443 17.7261 83.2183 17.3085 84.3804 17.3085C85.5425 17.3085 86.4417 17.6819 87.0781 18.4285C87.7145 19.1752 88.0327 20.2122 88.0327 21.5395V22.2779ZM86.1733 20.9173C86.1678 20.226 86.0046 19.6895 85.6836 19.3079C85.3626 18.9207 84.9199 18.7272 84.3555 18.7272C83.8021 18.7272 83.3317 18.929 82.9443 19.3328C82.5625 19.7365 82.3273 20.2647 82.2388 20.9173H86.1733Z" fill="black"/>
640<path d="M78.8306 26.0029H76.8965V13.426H78.8306V26.0029Z" fill="black"/>
641<path d="M74.8911 26.0029H72.957V13.426H74.8911V26.0029Z" fill="black"/>
642<path d="M71.1104 26.0028H69.2427V24.6754H69.2095C68.6229 25.6931 67.7624 26.2019 66.6279 26.2019C65.7923 26.2019 65.1366 25.9752 64.6606 25.5216C64.1903 25.0681 63.9551 24.468 63.9551 23.7214C63.9551 22.1175 64.8792 21.1828 66.7275 20.9173L69.251 20.5606C69.251 19.3494 68.6755 18.7438 67.5244 18.7438C66.5117 18.7438 65.5986 19.0922 64.7852 19.7891V18.105C65.6816 17.574 66.7165 17.3085 67.8896 17.3085C70.0368 17.3085 71.1104 18.3649 71.1104 20.4776V26.0028ZM69.251 21.8299L67.4663 22.0788C66.9129 22.1507 66.4951 22.2862 66.2129 22.4853C65.9362 22.6789 65.7979 23.0218 65.7979 23.514C65.7979 23.8735 65.9251 24.1694 66.1797 24.4017C66.4398 24.6284 66.7856 24.7418 67.2173 24.7418C67.8039 24.7418 68.2881 24.5372 68.6699 24.1279C69.0573 23.7131 69.251 23.1932 69.251 22.5682V21.8299Z" fill="black"/>
643<path d="M63.4355 25.9115C63.0592 26.0996 62.564 26.1936 61.9497 26.1936C60.3006 26.1936 59.4761 25.4027 59.4761 23.8209V19.0175H58.0566V17.5076H59.4761V15.5414L61.4019 14.9939V17.5076H63.4355V19.0175H61.4019V23.2651C61.4019 23.7684 61.4932 24.1279 61.6758 24.3436C61.8584 24.5593 62.1628 24.6671 62.5889 24.6671C62.9154 24.6671 63.1976 24.5731 63.4355 24.3851V25.9115Z" fill="black"/>
644<path d="M51.5938 25.7373V23.9537C52.3132 24.5012 53.1073 24.775 53.9761 24.775C55.1382 24.775 55.7192 24.4321 55.7192 23.7463C55.7192 23.5527 55.6694 23.3896 55.5698 23.2568C55.4702 23.1186 55.3346 22.9969 55.1631 22.8918C54.9971 22.7867 54.7979 22.6927 54.5654 22.6097C54.3385 22.5268 54.084 22.4327 53.8018 22.3277C53.4531 22.1894 53.1377 22.0428 52.8555 21.888C52.5788 21.7331 52.3464 21.5589 52.1582 21.3653C51.9756 21.1662 51.8372 20.9422 51.7432 20.6933C51.6491 20.4444 51.6021 20.1541 51.6021 19.8222C51.6021 19.413 51.6989 19.0535 51.8926 18.7438C52.0863 18.4285 52.3464 18.1658 52.6729 17.9556C52.9993 17.7399 53.3701 17.5795 53.7852 17.4745C54.2002 17.3638 54.6291 17.3085 55.0718 17.3085C55.8576 17.3085 56.5604 17.4274 57.1802 17.6653V19.3494C56.5825 18.9401 55.8963 18.7355 55.1216 18.7355C54.8781 18.7355 54.6567 18.7603 54.4575 18.8101C54.2638 18.8599 54.0978 18.929 53.9595 19.0175C53.8211 19.106 53.7132 19.2139 53.6357 19.3411C53.5583 19.4627 53.5195 19.5982 53.5195 19.7476C53.5195 19.9301 53.5583 20.085 53.6357 20.2122C53.7132 20.3394 53.8267 20.4527 53.9761 20.5523C54.131 20.6463 54.3136 20.7348 54.5239 20.8178C54.7397 20.8952 54.986 20.9809 55.2627 21.075C55.6279 21.2243 55.9544 21.3764 56.2422 21.5312C56.5355 21.6861 56.7845 21.8631 56.9893 22.0622C57.194 22.2558 57.3517 22.4825 57.4624 22.7425C57.5731 22.9969 57.6284 23.3011 57.6284 23.655C57.6284 24.0864 57.5288 24.4625 57.3296 24.7833C57.1304 25.1041 56.8647 25.3696 56.5327 25.5797C
64456.2007 25.7899 55.8161 25.9447 55.3789 26.0443C54.9473 26.1494 54.4907 26.2019 54.0093 26.2019C53.0796 26.2019 52.2744 26.0471 51.5938 25.7373Z" fill="black"/>
645<path d="M50.2773 26.0028H48.3516V21.216C48.3516 19.6287 47.7899 18.835 46.6665 18.835C46.0799 18.835 45.5957 19.0562 45.2139 19.4987C44.832 19.9356 44.6411 20.4887 44.6411 21.1579V26.0028H42.707V17.5076H44.6411V18.918H44.6743C45.3107 17.845 46.2293 17.3085 47.4302 17.3085C48.3543 17.3085 49.0599 17.61 49.5469 18.2128C50.0339 18.8101 50.2773 19.6757 50.2773 20.8095V26.0028Z" fill="black"/>
646<path d="M40.4946 26.0028H38.4609V14.1063H40.4946V26.0028Z" fill="black"/>
647<path d="M131.871 8.82512V7.56607C132.379 7.95257 132.939 8.14582 133.553 8.14582C134.373 8.14582 134.783 7.90376 134.783 7.41966C134.783 7.28302 134.748 7.16785 134.678 7.07416C134.607 6.97656 134.512 6.89067 134.391 6.81649C134.273 6.74231 134.133 6.67595 133.969 6.61738C133.809 6.55882 133.629 6.49246 133.43 6.41828C133.184 6.32068 132.961 6.21722 132.762 6.10791C132.566 5.9986 132.402 5.87562 132.27 5.73898C132.141 5.59843 132.043 5.44032 131.977 5.26464C131.91 5.08895 131.877 4.88399 131.877 4.64975C131.877 4.36085 131.945 4.10709 132.082 3.88846C132.219 3.66593 132.402 3.48049 132.633 3.33214C132.863 3.17988 133.125 3.06666 133.418 2.99249C133.711 2.91441 134.014 2.87537 134.326 2.87537C134.881 2.87537 135.377 2.9593 135.814 3.12718V4.31596C135.393 4.02706 134.908 3.88261 134.361 3.88261C134.189 3.88261 134.033 3.90018 133.893 3.93531C133.756 3.97045 133.639 4.01925 133.541 4.08171C133.443 4.14418 133.367 4.22031 133.312 4.3101C133.258 4.39599 133.23 4.49164 133.23 4.59705C133.23 4.72588 133.258 4.83519 133.312 4.92499C133.367 5.01478 133.447 5.09481 133.553 5.16508C133.662 5.23145 133.791 5.29392 133.939 5.35248C134.092 5.40713 134.266 5.46765 134.461 5.53401C134.719 5.63942 134.949 5.74678 135.152 5.8561C135.359 5.96541 135.535 6.09034 135.68 6.23089C135.824 6.36753 135.936 6.52759 136.014 6.71108C136.092 6.89067 136.131 7.10539 136.131 7.35525C136.131 7.65976 136.061 7.92524 135.92 8.15167C135.779 8.37811 135.592 8.5655 135.357 8.71385C135.123 8.86221 134.852 8.97152 134.543 9.04179C134.238 9.11597 133.916 9.15306 133.576 9.15306C132.92 9.15306 132.352 9.04374 131.871 8.82512Z" fill="black"/>
648<path d="M131.473 3.01587L129.703 9.01247H128.279L127.189 4.94837C127.146 4.79221 127.119 4.61652 127.107 4.42132H127.084C127.076 4.55406 127.041 4.72584 126.979 4.93665L125.795 9.01247H124.4L122.637 3.01587H124.043L125.133 7.33764C125.168 7.46647 125.191 7.63825 125.203 7.85297H125.244C125.256 7.689 125.287 7.51332 125.338 7.32593L126.551 3.01587H127.828L128.906 7.35521C128.941 7.49185 128.967 7.66362 128.982 7.87054H129.023C129.031 7.72609 129.061 7.55431 129.111 7.35521L130.178 3.01587H131.473Z" fill="black"/>
649<path d="M119.133 9.15306C118.207 9.15306 117.467 8.87392 116.912 8.31564C116.361 7.75346 116.086 7.00974 116.086 6.08448C116.086 5.07724 116.373 4.29058 116.947 3.72449C117.525 3.15841 118.303 2.87537 119.279 2.87537C120.217 2.87537 120.947 3.1506 121.471 3.70107C121.994 4.25154 122.256 5.01478 122.256 5.99079C122.256 6.94728 121.973 7.71442 121.406 8.29222C120.844 8.86611 120.086 9.15306 119.133 9.15306ZM119.197 3.95874C118.666 3.95874 118.246 4.14418 117.938 4.51506C117.629 4.88594 117.475 5.39737 117.475 6.04935C117.475 6.6779 117.631 7.17371 117.943 7.53679C118.256 7.89596 118.674 8.07554 119.197 8.07554C119.732 8.07554 120.143 7.89791 120.428 7.54264C120.717 7.18737 120.861 6.6818 120.861 6.02592C120.861 5.36614 120.717 4.85666 120.428 4.49749C120.143 4.13832 119.732 3.95874 119.197 3.95874Z" fill="black"/>
650<path d="M114.937 9.01242H113.577V7.99347H113.554C113.116 8.76647 112.442 9.15297 111.532 9.15297C110.794 9.15297 110.202 8.88554 109.757 8.35069C109.315 7.81193 109.095 7.07992 109.095 6.15467C109.095 5.16304 109.339 4.36857 109.827 3.77125C110.319 3.17394 110.974 2.87528 111.79 2.87528C112.599 2.87528 113.187 3.19931 113.554 3.84738H113.577V0.134644H114.937V9.01242ZM113.595 6.27179V5.48708C113.595 5.06154 113.456 4.70041 113.179 4.40371C112.901 4.107 112.548 3.95865 112.118 3.95865C111.61 3.95865 111.21 4.14799 110.917 4.52668C110.628 4.90538 110.483 5.43047 110.483 6.10196C110.483 6.71099 110.622 7.19314 110.899 7.54841C111.181 7.89977 111.558 8.07545 112.03 8.07545C112.495 8.07545 112.872 7.90563 113.161 7.56598C113.45 7.22242 113.595 6.79103 113.595 6.27179Z" fill="black"/>
651<path d="M108.058 9.01251H106.698V5.63357C106.698 4.51311 106.302 3.95288 105.509 3.95288C105.095 3.95288 104.753 4.10904 104.483 4.42136C104.214 4.72978 104.079 5.12019 104.079 5.59258V9.01251H102.714V3.01591H104.079V4.01144H104.103C104.552 3.25406 105.2 2.87537 106.048 2.87537C106.7 2.87537 107.198 3.08814 107.542 3.51368C107.886 3.93531 108.058 4.54629 108.058 5.34662V9.01251Z" fill="black"/>
652<path d="M100.499 1.75681C100.276 1.75681 100.085 1.68459 99.9248 1.54014C99.7686 1.39569 99.6904 1.2122 99.6904 0.989671C99.6904 0.767141 99.7686 0.581699 99.9248 0.433346C100.085 0.284992 100.276 0.210815 100.499 0.210815C100.729 0.210815 100.925 0.284992 101.085 0.433346C101.245 0.581699 101.325 0.767141 101.325 0.989671C101.325 1.20049 101.245 1.38203 101.085 1.53428C100.925 1.68264 100.729 1.75681 100.499 1.75681ZM101.173 9.01247H99.8135V3.01587H101.173V9.01247Z" fill="black"/>
653<path d="M99.04 0.614868L96.7373 9.01245H95.1611L93.5615 3.13883C93.4951 2.88897 93.4541 2.61569 93.4385 2.31898H93.415C93.3955 2.59617 93.3486 2.86555 93.2744 3.12712L91.6689 9.01245H90.0576L87.708 0.614868H89.2373L90.7607 6.76373C90.8232 7.02139 90.8623 7.29077 90.8779 7.57186H90.9072C90.9229 7.37275 90.9775 7.10338 91.0713 6.76373L92.7939 0.614868H94.2295L95.8232 6.81057C95.8779 7.02139 95.9189 7.27125 95.9463 7.56015H95.9697C95.9814 7.36495 96.0264 7.10728 96.1045 6.78715L97.5986 0.614868H99.04Z" fill="black"/>
654<path d="M84.6777 4.31006C84.5137 4.18123 84.2773 4.11681 83.9688 4.11681C83.5664 4.11681 83.2305 4.29835 82.9609 4.66142C82.6914 5.0245 82.5566 5.51836 82.5566 6.143V9.01247H81.1973V3.01587H82.5566V4.2515H82.5801C82.7129 3.82986 82.916 3.50192 83.1895 3.26768C83.4668 3.02953 83.7754 2.91046 84.1152 2.91046C84.3613 2.91046 84.5488 2.94755 84.6777 3.02173V4.31006Z" fill="black"/>
655<path d="M76.9258 9.15306C76 9.15306 75.2598 8.87392 74.7051 8.31564C74.1543 7.75346 73.8789 7.
65500974 73.8789 6.08448C73.8789 5.07724 74.166 4.29058 74.7402 3.72449C75.3184 3.15841 76.0957 2.87537 77.0723 2.87537C78.0098 2.87537 78.7402 3.1506 79.2637 3.70107C79.7871 4.25154 80.0488 5.01478 80.0488 5.99079C80.0488 6.94728 79.7656 7.71442 79.1992 8.29222C78.6367 8.86611 77.8789 9.15306 76.9258 9.15306ZM76.9902 3.95874C76.459 3.95874 76.0391 4.14418 75.7305 4.51506C75.4219 4.88594 75.2676 5.39737 75.2676 6.04935C75.2676 6.6779 75.4238 7.17371 75.7363 7.53679C76.0488 7.89596 76.4668 8.07554 76.9902 8.07554C77.5254 8.07554 77.9355 7.89791 78.2207 7.54264C78.5098 7.18737 78.6543 6.6818 78.6543 6.02592C78.6543 5.36614 78.5098 4.85666 78.2207 4.49749C77.9355 4.13832 77.5254 3.95874 76.9902 3.95874Z" fill="black"/>
656<path d="M73.7617 1.24148C73.5781 1.13607 73.3691 1.08337 73.1348 1.08337C72.4746 1.08337 72.1445 1.45621 72.1445 2.20188V3.01587H73.5391V4.08167H72.1504V9.01247H70.791V4.08167H69.7656V3.01587H70.791V2.04376C70.791 1.41131 70.998 0.913544 71.4121 0.550469C71.8262 0.18349 72.3438 0 72.9648 0C73.3008 0 73.5664 0.0370883 73.7617 0.111265V1.24148Z" fill="black"/>
657<path d="M66.3721 8.94802C66.1064 9.08076 65.7568 9.14713 65.3232 9.14713C64.1592 9.14713 63.5771 8.58885 63.5771 7.4723V4.08164H62.5752V3.01584H63.5771V1.62795L64.9365 1.24146V3.01584H66.3721V4.08164H64.9365V7.07994C64.9365 7.43521 65.001 7.68897 65.1299 7.84123C65.2588 7.99349 65.4736 8.06961 65.7744 8.06961C66.0049 8.06961 66.2041 8.00325 66.3721 7.87051V8.94802Z" fill="black"/>
658<path d="M60.9932 1.75681C60.7705 1.75681 60.5791 1.68459 60.4189 1.54014C60.2627 1.39569 60.1846 1.2122 60.1846 0.989671C60.1846 0.767141 60.2627 0.581699 60.4189 0.433346C60.5791 0.284992 60.7705 0.210815 60.9932 0.210815C61.2236 0.210815 61.4189 0.284992 61.5791 0.433346C61.7393 0.581699 61.8193 0.767141 61.8193 0.989671C61.8193 1.20049 61.7393 1.38203 61.5791 1.53428C61.4189 1.68264 61.2236 1.75681 60.9932 1.75681ZM61.667 9.01247H60.3076V3.01587H61.667V9.01247Z" fill="black"/>
659<path d="M56.3105 8.94802C56.0449 9.08076 55.6953 9.14713 55.2617 9.14713C54.0977 9.14713 53.5156 8.58885 53.5156 7.4723V4.08164H52.5137V3.01584H53.5156V1.62795L54.875 1.24146V3.01584H56.3105V4.08164H54.875V7.07994C54.875 7.43521 54.9395 7.68897 55.0684 7.84123C55.1973 7.99349 55.4121 8.06961 55.7129 8.06961C55.9434 8.06961 56.1426 8.00325 56.3105 7.87051V8.94802Z" fill="black"/>
660<path d="M52.0918 6.38314H48.002C48.0176 6.93752 48.1875 7.36501 48.5117 7.66562C48.8398 7.96623 49.2891 8.11653 49.8594 8.11653C50.5 8.11653 51.0879 7.92524 51.623 7.54264V8.63772C51.0762 8.98128 50.3535 9.15306 49.4551 9.15306C48.5723 9.15306 47.8789 8.88173 47.375 8.33906C46.875 7.7925 46.625 7.02536 46.625 6.03764C46.625 5.10457 46.9004 4.34524 47.4512 3.75963C48.0059 3.17012 48.6934 2.87537 49.5137 2.87537C50.334 2.87537 50.9688 3.13889 51.418 3.66593C51.8672 4.19298 52.0918 4.92499 52.0918 5.86195V6.38314ZM50.7793 5.42275C50.7754 4.93475 50.6602 4.55605 50.4336 4.28668C50.207 4.01339 49.8945 3.87675 49.4961 3.87675C49.1055 3.87675 48.7734 4.01925 48.5 4.30424C48.2305 4.58924 48.0645 4.96207 48.002 5.42275H50.7793Z" fill="black"/>
661<path d="M45.5938 8.4386C44.7188 8.91489 43.7441 9.15304 42.6699 9.15304C41.4277 9.15304 40.4219 8.76654 39.6523 7.99354C38.8828 7.22054 38.498 6.19768 38.498 4.92497C38.498 3.62492 38.918 2.55912 39.7578 1.72756C40.6016 0.892097 41.6719 0.474365 42.9688 0.474365C43.9023 0.474365 44.6875 0.611007 45.3242 0.884289V2.31902C44.6797 1.88958 43.9121 1.67486 43.0215 1.67486C42.127 1.67486 41.3926 1.96961 40.8184 2.55912C40.248 3.14863 39.9629 3.91187 39.9629 4.84884C39.9629 5.81313 40.209 6.57247 40.7012 7.12684C41.1934 7.67731 41.8613 7.95255 42.7051 7.95255C43.2832 7.95255 43.7832 7.84128 44.2051 7.61875V5.62184H42.4355V4.45063H45.5938V8.4386Z" fill="black"/>
662<path fill-rule="evenodd" clip-rule="evenodd" d="M0 25.3051L21.4452 28.0773L29.6284 22.7759L29.7415 2.59423L10.8357 0.0175781L0 4.93137V25.3051Z" fill="#E19747"/>
663<path fill-rule="evenodd" clip-rule="evenodd" d="M29.7415 2.59423L21.3702 7.83362L0 4.93137L10.8357 0.0175781L29.7415 2.59423Z" fill="#F3C07B"/>
664<path fill-rule="evenodd" clip-rule="evenodd" d="M21.4486 28.0773L21.3701 7.83363L29.7414 2.59424L29.9998 22.8549L21.4486 28.0773Z" fill="#FFCE7C"/>
665<path fill-rule="evenodd" clip-rule="evenodd" d="M14.6343 0.535217L20.8271 1.37907L11.9625 6.67292L11.9572 15.8358L8.80311 13.689L5.64844 15.471L6.04219 5.85015L14.6343 0.535217Z" fill="#A56953"/>
666</svg>
667
668</a>
669          
670        </div>
671        
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704  <img
705    loading=""
706    decoding="async"
707    src="https://magicpods.app/images/banner.webp"
708    alt="banner image"
709    class=" img"
710    height=""
711    width="1100" />
712
713
714      </div>
715    </div>
716  </div>
717</section>
718
719
720
721
722
723
724<section class="banner">
725  <div class="container">
726    <div class="row justify-content-center">
727      <div class="col-lg-10">
728        <div class="row gx-md-5 gy-5">
729          
730            <div class="col-lg-4 col-md-6">
731              <div class="rounded-1 d-block d-sm-flex">
732                  
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765  <img
766    loading=""
767    decoding="async"
768    src="https://magicpods.app/images/ear_3d_default.png"
769    alt="Ear detection"
770    class="feature-icon img"
771    height=""
772    width="" />
773
774
775                <div class="block">
776                  <h2 class="mb-1 h6">Ear detection</h4>
777                  <p class="mb-0">Control playback when taking off and putting on AirPods</p>
778                </div>
779              </div>
780            </div>
781          
782            <div class="col-lg-4 col-md-6">
783              <div class="rounded-1 d-block d-sm-flex">
784                  
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817  <img
818    loading=""
819    decoding="async"
820    src="https://magicpods.app/images/battery_3d.png"
821    alt="Battery level"
822    class="feature-icon img"
823    height=""
824    width="" />
825
826
827                <div class="block">
828                  <h2 class="mb-1 h6">Battery level</h4>
829                  <p class="mb-0">
829Track charging of AirPods and other headphones in app, live tiles, widgets, or tray icon</p>
830                </div>
831              </div>
832            </div>
833          
834            <div class="col-lg-4 col-md-6">
835              <div class="rounded-1 d-block d-sm-flex">
836                  
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869  <img
870    loading=""
871    decoding="async"
872    src="https://magicpods.app/images/film_frames_3d.png"
873    alt="Pop-up animation"
874    class="feature-icon img"
875    height=""
876    width="" />
877
878
879                <div class="block">
880                  <h2 class="mb-1 h6">Pop-up animation</h4>
881                  <p class="mb-0">Same animation as on iPhone when you open AirPods or Beats case</p>
882                </div>
883              </div>
884            </div>
885          
886            <div class="col-lg-4 col-md-6">
887              <div class="rounded-1 d-block d-sm-flex">
888                  
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921  <img
922    loading=""
923    decoding="async"
924    src="https://magicpods.app/images/level_slider_3d.png"
925    alt="Easy connection"
926    class="feature-icon img"
927    height=""
928    width="" />
929
930
931                <div class="block">
932                  <h2 class="mb-1 h6">Easy connection</h4>
933                  <p class="mb-0">Connect headphones by hotkey, in app, tray icon or pop-up animation</p>
934                </div>
935              </div>
936            </div>
937          
938            <div class="col-lg-4 col-md-6">
939              <div class="rounded-1 d-block d-sm-flex">
940                  
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973  <img
974    loading=""
975    decoding="async"
976    src="https://magicpods.app/images/microphone_3d.png"
977    alt="VoiceOver"
978    class="feature-icon img"
979    height=""
980    width="" />
981
982
983                <div class="block">
984                  <h2 class="mb-1 h6">VoiceOver</h4>
985                  <p class="mb-0">Offline read aloud apps notifications with headphones connected</p>
986                </div>
987              </div>
988            </div>
989          
990            <div class="col-lg-4 col-md-6">
991              <div class="rounded-1 d-block d-sm-flex">
992                  
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025  <img
1026    loading=""
1027    decoding="async"
1028    src="https://magicpods.app/images/musical_notes_3d.png"
1029    alt="Audio streaming"
1030    class="feature-icon img"
1031    height=""
1032    width="" />
1033
1034
1035                <div class="block">
1036                  <h2 class="mb-1 h6">Audio streaming</h4>
1037                  <p class="mb-0">Play sound from other Bluetooth devices using your computer as a Bluetooth speaker</p>
1038                </div>
1039              </div>
1040            </div>
1041          
1042        </div>
1043      </div>
1044    </div>
1045  </div>
1046</section>
1047
1048
1049
1050
1051
1052
1053
1054<section class="banner">
1055
1056
1057<div class="container  mb-5">
1058    <div class="row align-items-center gy-4 col-lg-10 mx-auto" >
1059      <div class="col-lg-6 order-lg-0 order-1">
1060        <div class="pe-0 pe-lgy-5 text-center text-lg-start">
1061          <h2 class="section-title h4">Advanced AirPods features with MagicAAP driver</h2>
1062          <p class="mb-3">Control noise cancellation, monitor accurate battery level, enjoy improved ear detection, and customize button.</p>
1063          
1064          
1065          <a href="/magicaap/" target="_blank" title="Learn more" class="btn" style="margin-left: 0em;">Learn more</a> 
1066          
1067          
1068        </div>
1069      </div>
1070      <div class="col-lg-6 order-lg-1 order-0">
1071        
1072        
1073          
1074            
1075            
1076            <div class="swiper-slide">
1077              
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110  <img
1111    loading=""
1112    decoding="async"
1113    src="https://magicpods.app/images/banner-2.webp"
1114    alt="Advanced AirPods features with MagicAAP driver"
1115    class=" img"
1116    height=""
1117    width="" />
1118
1119
1120            </div>
1121            
1122          
1123          
1124        
1125      </div>
1126    </div>
1127  </div>
1128  
1129<div class="container  mb-5">
1130    <div class="row align-items-center gy-4 col-lg-10 mx-auto" >
1131      <div class="col-lg-6 order-lg-1 order-1">
1132        <div class="pe-0 pe-lgy-5 text-center text-lg-start">
1133          <h2 class="section-title h4">Control the app without opening it</h2>
1134          <p class="mb-3">All key functions in one click. The tray icon provides quick access to essential information.</p>
1135          
1136        </div>
1137      </div>
1138      <div class="col-lg-6 order-lg-0 order-0">
1139        
1140        
1141          
1142            
1143            
1144            <div class="swiper-slide">
1145              
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178  <img
1179    loading=""
1180    decoding="async"
1181    src="https://magicpods.app/images/banner-3.webp"
1182    alt="Control the app without opening it"
1183    class=" img"
1184    height=""
1185    width="" />
1186
1187
1188            </div>
1189            
1190          
1191          
1192        
1193      </div>
1194    </div>
1195  </div>
1196  
1197<div class="container  mb-5">
1198    <div class="row align-items-center gy-4 col-lg-10 mx-auto" >
1199      <div class="col-lg-6 order-lg-0 order-1">
1200        <div class="pe-0 pe-lgy-5 text-center text-lg-start">
1201          <h2 class="section-title h4">Flexible hotkeys</h2>
1202          <p class="mb-3">Customize keyboard shortcuts to control noise cancellation, Bluetooth, audio outputs, and connected devices.</p>
1203          
1204        </div>
1205      </div>
1206      <div class="col-lg-6 order-lg-1 order-0">
1207        
1208        
1209          
1210            
1211            
1212            <div class="swiper-slide">
1213              
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246  <img
1247    loading=""
1248    decoding="async"
1249    src="https://magicpods.app/images/banner-4.webp"
1250    alt="Flexible hotkeys"
1251    class=" img"
1252    height=""
1253    width="" />
1254
1255
1256            </div>
1257            
1258          
1259          
1260        
1261      </div>
1262    </div>
1263  </div>
1264  
1265<div class="container ">
1266    <div class="row align-items-center gy-4 col-lg-10 mx-auto" >
1267      <div class="col-lg-6 order-lg-1 order-1">
1268        <div class="pe-0 pe-lgy-5 text-center text-lg-start">
1269          <h2 class="section-title h4">Not just for AirPods</h2>
1270          <p class="mb-3">The app supports AirPods, Beats, Fake AirPods with Airoha chips, some Sony models, and other headphones.</p>
1271          
1272          
1273          <a href="/headphones/" target="_blank" title="Supported headphones" class="btn" style="margin-left: 0em;">Supported headphones</a> 
1274          
1275          
1276        </div>
1277      </div>
1278      <div class="col-lg-6 order-lg-0 order-0">
1279        
1280        
1281          
1282            
1283            
1284            <div class="swiper-slide">
1285              
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318  <img
1319    loading=""
1320    decoding="async"
1321    src="https://magicpods.app/images/banner-5.webp"
1322    alt="Not just for AirPods"
1323    class=" img"
1324    height=""
1325    width="" />
1326
1327
1328            </div>
1329            
1330          
1331          
1332        
1333      </div>
1334    </div>
1335  </div>
1336  
1337</section>
1338  
1339  
1340
1341
1342
1343
1344<section class="banner">
1345  <div class="container">
1346    <div class="row">
1347      <div class="col-lg-6 mx-auto">
1348        <div class="text-center">
1349          <h2 class="section-title h4">Privacy above all</h2>
1350          <p>No data collection, no ads, no subscriptions, no paid content. Just a convenient tool that works offline. And yes—no AI.</p>
1351        </div>
1352      </div>
1353    </div>
1354  </section>
1355
1356
1357
1358
1359
1360<section class="section">
1361  <link href="/css/lightbox.css" rel="stylesheet">
1362<script src="/js/lightbox.js"></script>
1362
1363
1364
1365
1366<div class="container">
1367  <div class="row image-gallery col-lg-10 mx-auto">
1368    
1369      
1370      <div class="col-12 col-sm-6 col-md-4 mb-4">
1371          <a href="https://magicpods.app/images/screenshots/en/01-screenshot.webp" title="/images/screenshots/en/01-screenshot" class="lightbox-image d-block text-center">
1372            <img src="https://magicpods.app/images/screenshots/en/01-screenshot_hu_1cbfab95c943a835.webp" class="img-fluid rounded" alt="/images/screenshots/en/01-screenshot" title="/images/screenshots/en/01-screenshot">
1373          </a>
1374        </div>
1375      <div class="col-12 col-sm-6 col-md-4 mb-4">
1376          <a href="https://magicpods.app/images/screenshots/en/02-screenshot.webp" title="/images/screenshots/en/02-screenshot" class="lightbox-image d-block text-center">
1377            <img src="https://magicpods.app/images/screenshots/en/02-screenshot_hu_6dcb241d5f83d3e9.webp" class="img-fluid rounded" alt="/images/screenshots/en/02-screenshot" title="/images/screenshots/en/02-screenshot">
1378          </a>
1379        </div>
1380      <div class="col-12 col-sm-6 col-md-4 mb-4">
1381          <a href="https://magicpods.app/images/screenshots/en/03-screenshot.webp" title="/images/screenshots/en/03-screenshot" class="lightbox-image d-block text-center">
1382            <img src="https://magicpods.app/images/screenshots/en/03-screenshot_hu_a8ca6ec0932f2dde.webp" class="img-fluid rounded" alt="/images/screenshots/en/03-screenshot" title="/images/screenshots/en/03-screenshot">
1383          </a>
1384        </div>
1385      <div class="col-12 col-sm-6 col-md-4 mb-4">
1386          <a href="https://magicpods.app/images/screenshots/en/04-screenshot.webp" title="/images/screenshots/en/04-screenshot" class="lightbox-image d-block text-center">
1387            <img src="https://magicpods.app/images/screenshots/en/04-screenshot_hu_7a12207de3b5e118.webp" class="img-fluid rounded" alt="/images/screenshots/en/04-screenshot" title="/images/screenshots/en/04-screenshot">
1388          </a>
1389        </div>
1390      <div class="col-12 col-sm-6 col-md-4 mb-4">
1391          <a href="https://magicpods.app/images/screenshots/en/05-screenshot.webp" title="/images/screenshots/en/05-screenshot" class="lightbox-image d-block text-center">
1392            <img src="https://magicpods.app/images/screenshots/en/05-screenshot_hu_2fbb0a66154c53d2.webp" class="img-fluid rounded" alt="/images/screenshots/en/05-screenshot" title="/images/screenshots/en/05-screenshot">
1393          </a>
1394        </div>
1395      <div class="col-12 col-sm-6 col-md-4 mb-4">
1396          <a href="https://magicpods.app/images/screenshots/en/06-screenshot.webp" title="/images/screenshots/en/06-screenshot" class="lightbox-image d-block text-center">
1397            <img src="https://magicpods.app/images/screenshots/en/06-screenshot_hu_9cde067f5a921346.webp" class="img-fluid rounded" alt="/images/screenshots/en/06-screenshot" title="/images/screenshots/en/06-screenshot">
1398          </a>
1399        </div>
1400      <div class="col-12 col-sm-6 col-md-4 mb-4">
1401          <a href="https://magicpods.app/images/screenshots/en/07-screenshot.webp" title="/images/screenshots/en/07-screenshot" class="lightbox-image d-block text-center">
1402            <img src="https://magicpods.app/images/screenshots/en/07-screenshot_hu_a6343eaf013e4cab.webp" class="img-fluid rounded" alt="/images/screenshots/en/07-screenshot" title="/images/screenshots/en/07-screenshot">
1403          </a>
1404        </div>
1405      <div class="col-12 col-sm-6 col-md-4 mb-4">
1406          <a href="https://magicpods.app/images/screenshots/en/08-screenshot.webp" title="/images/screenshots/en/08-screenshot" class="lightbox-image d-block text-center">
1407            <img src="https://magicpods.app/images/screenshots/en/08-screenshot_hu_ab04cc3d0456899.webp" class="img-fluid rounded" alt="/images/screenshots/en/08-screenshot" title="/images/screenshots/en/08-screenshot">
1408          </a>
1409        </div>
1410      <div class="col-12 col-sm-6 col-md-4 mb-4">
1411          <a href="https://magicpods.app/images/screenshots/en/09-screenshot.webp" title="/images/screenshots/en/09-screenshot" class="lightbox-image d-block text-center">
1412            <img src="https://magicpods.app/images/screenshots/en/09-screenshot_hu_b8769c50434e0f4c.webp" class="img-fluid rounded" alt="/images/screenshots/en/09-screenshot" title="/images/screenshots/en/09-screenshot">
1413          </a>
1414        </div>
1415      <div class="col-12 col-sm-6 col-md-4 mb-4">
1416          <a href="https://magicpods.app/images/screenshots/en/10-screenshot.webp" title="/images/screenshots/en/10-screenshot" class="lightbox-image d-block text-center">
1417            <img src="https://magicpods.app/images/screenshots/en/10-screenshot_hu_3a
14175d7696f180fb2e.webp" class="img-fluid rounded" alt="/images/screenshots/en/10-screenshot" title="/images/screenshots/en/10-screenshot">
1418          </a>
1419        </div>
1420      <div class="col-12 col-sm-6 col-md-4 mb-4">
1421          <a href="https://magicpods.app/images/screenshots/en/11-screenshot.webp" title="/images/screenshots/en/11-screenshot" class="lightbox-image d-block text-center">
1422            <img src="https://magicpods.app/images/screenshots/en/11-screenshot_hu_d3450d3211f3a177.webp" class="img-fluid rounded" alt="/images/screenshots/en/11-screenshot" title="/images/screenshots/en/11-screenshot">
1423          </a>
1424        </div>
1425      <div class="col-12 col-sm-6 col-md-4 mb-4">
1426          <a href="https://magicpods.app/images/screenshots/en/12-screenshot.webp" title="/images/screenshots/en/12-screenshot" class="lightbox-image d-block text-center">
1427            <img src="https://magicpods.app/images/screenshots/en/12-screenshot_hu_6c9fc83c720fa7e4.webp" class="img-fluid rounded" alt="/images/screenshots/en/12-screenshot" title="/images/screenshots/en/12-screenshot">
1428          </a>
1429        </div>
1430      
1431
1432    
1433  </div>
1434</div>
1435</section>
1436
1437
1438
1439
1440	</main>
1441
1442	
1443	
1444	<footer class="bg-light section pb-0">
1445  <div class="container">
1446    <div class="row justify-content-center">
1447      <div class="col-xl-11">
1448        <div class="section pt-0">
1449          <div class="row gy-4">
1450            <div class="col-lg-3 col-sm-6">
1451              
1452              <div class="h5 mb-4">Project</div>
1453              <ul class="list-unstyled footer-list">
1454                
1455                <li><a href="/faq" title="FAQ">FAQ</a></li>
1456                
1457                <li><a href="/privacy" title="Privacy policy">Privacy policy</a></li>
1458                
1459                <li><a href="https://help.magicpods.app/changelog/" title="Changelog">Changelog</a></li>
1460                
1461              </ul>
1462              
1463            </div>
1464            <div class="col-lg-3 col-sm-6">
1465              
1466              <div class="h5 mb-4">Support</div>
1467              <ul class="list-unstyled footer-list">
1468                
1469                <li><a href="/buy" title="Purchase">Purchase</a></li>
1470                
1471                <li><a href="https://help.magicpods.app/" title="Help">Help</a></li>
1472                
1473                <li><a href="https://weblate.magicpods.app/engage/magicpods-windows/" title="Translate">Translate</a></li>
1474                
1475                <li><a href="https://help.magicpods.app/report-issue/" title="Report issue">Report issue</a></li>
1476                
1477                <li><a href="/donate" title="Donate">Donate</a></li>
1478                
1479                <li><a href="/contact" title="Contact">Contact</a></li>
1480                
1481              </ul>
1482              
1483            </div>
1484            <div class="col-lg-3 col-sm-6">
1485              
1486              <div class="h5 mb-4">Apps</div>
1487              <ul class="list-unstyled footer-list">
1488                
1489                <li><a href="https://play.google.com/store/apps/details?id=com.watchfacestudio.twistwatchface" title="Twist">Twist</a></li>
1490                
1491                <li><a href="https://www.microsoft.com/store/apps/9N78GWBTW7L5" title="MagicSelect">MagicSelect</a></li>
1492                
1493                <li><a href="https://www.microsoft.com/store/apps/9NGB2P0TSMBF" title="MagicTranslate">MagicTranslate</a></li>
1494                
1495                <li><a href="https://play.google.com/store/apps/details?id=yet.another.dino" title="Yet Another Dino">Yet Another Dino</a></li>
1496                
1497                <li><a href="https://play.google.com/store/apps/details?id=com.watchfacestudio.smartminimalismwatchface" title="Smart minimalism">Smart minimalism</a></li>
1498                
1499                <li><a href="/steamdeck" title="MagicPods for Steam Deck">MagicPods for Steam Deck</a></li>
1500                
1501                <li><a href="https://github.com/steam3d/magicblackDecky" title="MagicBlack for Steam Deck">MagicBlack for Steam Deck</a></li>
1502                
1503              </ul>
1504              
1505            </div>
1506            <div class="col-lg-3 col-sm-6">
1507              <a class="d-block h5 mb-3" href="https://magicpods.app/">
1508                
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528  
1529
1530
1531
1532
1533  
1534  
1535    <img
1536      fetchpriority="high"
1537      decoding="async"
1538      src="https://magicpods.app/images/logo.png"
1539      alt="MagicPods"
1540      class="img img-light"
1541      height="auto"
1542      width="156" />
1543    <img
1544      fetchpriority="high"
1545      decoding="async"
1546      src="https://magicpods.app/images/logo-w.png"
1547      alt="MagicPods"
1548      class="img img-dark"
1549      height="auto"
1550      width="156" />
1551  
1552
1553
1554
1555              </a>
1556              <p class="mb-4">
1556Contacts and social media</p>
1557              
1558              <ul class="list-inline social-icons">
1559                
1560                <li class="list-inline-item"><a href="mailto:[email protected]" title="Mail"><i
1561                      class="fa-solid fa-envelope"></i></a></li>
1562                
1563                <li class="list-inline-item"><a href="https://discord.com/invite/UyY4PY768V" title="Discord"><i
1564                      class="fab fa-discord"></i></a></li>
1565                
1566                <li class="list-inline-item"><a href="https://github.com/steam3d/" title="GitHub"><i
1567                      class="fab fa-github"></i></a></li>
1568                
1569                <li class="list-inline-item"><a href="https://www.linkedin.com/in/steam3d/" title="Linkedin"><i
1570                      class="fab fa-linkedin"></i></a></li>
1571                
1572                <li class="list-inline-item"><a href="https://t.me/magicpods" title="Telegram"><i
1573                      class="fab fa-telegram"></i></a></li>
1574                
1575                <li class="list-inline-item"><a href="https://www.reddit.com/r/magicpods/" title="Reddit"><i
1576                      class="fab fa-reddit"></i></a></li>
1577                
1578                <li class="list-inline-item"><a href="https://www.behance.net/steam3d" title="Behance"><i
1579                      class="fab fa-behance"></i></a></li>
1580                
1581              </ul>
1582              
1583            </div>
1584          </div>
1585        </div>
1586        
1587
1588      </div>
1589    </div>
1590  </div>
1591</footer>
1592	
1593
1594
1595
1596
1597
1598
1599
1600
1601<script crossorigin="anonymous" defer  integrity="sha512-ax0wAJuPg6CSws9vJ4lswjWvk2zwkcJ8pNDt0Qr0cEeqTy1iX13iYLr1e4gUgACd9hW1fqH1uZJBFOzVdXhUsw==" type="application/javascript">(() => {
1602  var __create = Object.create;
1603  var __defProp = Object.defineProperty;
1604  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
1605  var __getOwnPropNames = Object.getOwnPropertyNames;
1606  var __getProtoOf = Object.getPrototypeOf;
1607  var __hasOwnProp = Object.prototype.hasOwnProperty;
1608  var __commonJS = (cb, mod) => function __require() {
1609    try {
1610      return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
1611    } catch (e) {
1612      throw mod = 0, e;
1613    }
1614  };
1615  var __copyProps = (to, from, except, desc) => {
1616    if (from && typeof from === "object" || typeof from === "function") {
1617      for (let key of __getOwnPropNames(from))
1618        if (!__hasOwnProp.call(to, key) && key !== except)
1619          __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
1620    }
1621    return to;
1622  };
1623  var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
1624    // If the importer is in node compatibility mode or this is not an ESM
1625    // file that has been converted to a CommonJS file using a Babel-
1626    // compatible transform (i.e. "__esModule" has not been set), then set
1627    // "default" to the CommonJS "module.exports" for node compatibility.
1628    isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
1629    mod
1630  ));
1631
1632  // ns-hugo-imp:/home/ubuntu/.cache/hugo_cache/modules/filecache/modules/pkg/mod/github.com/gohugoio/hugo-mod-jslibs-dist/popperjs/[email protected]/package/dist/cjs/popper.js
1633  var require_popper = __commonJS({
1634    "ns-hugo-imp:/home/ubuntu/.cache/hugo_cache/modules/filecache/modules/pkg/mod/github.com/gohugoio/hugo-mod-jslibs-dist/popperjs/[email protected]/package/dist/cjs/popper.js"(exports) {
1635      "use strict";
1636      Object.defineProperty(exports, "__esModule", { value: true });
1637      function getWindow(node) {
1638        if (node == null) {
1639          return window;
1640        }
1641        if (node.toString() !== "[object Window]") {
1642          var ownerDocument = node.ownerDocument;
1643          return ownerDocument ? ownerDocument.defaultView || window : window;
1644        }
1645        return node;
1646      }
1647      function isElement2(node) {
1648        var OwnElement = getWindow(node).Element;
1649        return node instanceof OwnElement || node instanceof Element;
1650      }
1651      function isHTMLElement(node) {
1652        var OwnElement = getWindow(node).HTMLElement;
1653        return node instanceof OwnElement || node instanceof HTMLElement;
1654      }
1655      function isShadowRoot(node) {
1656        if (typeof ShadowRoot === "undefined") {
1657          return false;
1658        }
1659        var OwnElement = getWindow(node).ShadowRoot;
1660        return node instanceof OwnElement || node instanceof ShadowRoot;
1661      }
1662      var max = Math.max;
1663      var min = Math.min;
1664      var round = Math.round;
1665      function getBoundingClientRect(element, includeScale) {
1666        if (includeScale === void 0) {
1667          includeScale = false;
1668        }
1669        var rect = element.getBoundingClientRect();
1670        var scaleX = 1;
1671        var scaleY = 1;
1672        if (isHTMLElement(element) && includeScale) {
1673          var offsetHeight = element.offsetHeight;
1674          var offsetWidth = element.offsetWidth;
1675          if (offsetWidth > 0) {
1676            scaleX = round(rect.width) / offsetWidth || 1;
1677          }
1678          if (offsetHeight > 0) {
1679            scaleY = round(rect.height) / offsetHeight || 1;
1680          }
1681        }
1682        return {
1683          width: rect.width / scaleX,
1684          height: rect.height / scaleY,
1685          top: rect.top / scaleY,
1686          right: rect.right / scaleX,
1687          bottom: rect.bottom / scaleY,
1688          left: rect.left / scaleX,
1689          x: rect.left / scaleX,
1690          y: rect.top / scaleY
1691        };
1692      }
1693      function getWindowScroll(node) {
1694        var win = getWindow(node);
1695        var scrollLeft = win.pageXOffset;
1696        var scrollTop = win.pageYOffset;
1697        return {
1698          scrollLeft,
1699          scrollTop
1700        };
1701      }
1702      function getHTMLElementScroll(element) {
1703        return {
1704          scrollLeft: element.scrollLeft,
1705          scrollTop: element.scrollTop
1706        };
1707      }
1708      function getNodeScroll(node) {
vendor: 4,754 bytes, lines 1709-1824
1709        if (node === getWindow(node) || !isHTMLElement(node)) {
1710          return getWindowScroll(node);
1711        } else {
1712          return getHTMLElementScroll(node);
1713        }
1714      }
1715      function getNodeName(element) {
1716        return element ? (element.nodeName || "").toLowerCase() : null;
1717      }
1718      function getDocumentElement(element) {
1719        return ((isElement2(element) ? element.ownerDocument : (
1720          // $FlowFixMe[prop-missing]
1721          element.document
1722        )) || window.document).documentElement;
1723      }
1724      function getWindowScrollBarX(element) {
1725        return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;
1726      }
1727      function getComputedStyle2(element) {
1728        return getWindow(element).getComputedStyle(element);
1729      }
1730      function isScrollParent(element) {
1731        var _getComputedStyle = getComputedStyle2(element), overflow = _getComputedStyle.overflow, overflowX = _getComputedStyle.overflowX, overflowY = _getComputedStyle.overflowY;
1732        return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);
1733      }
1734      function isElementScaled(element) {
1735        var rect = element.getBoundingClientRect();
1736        var scaleX = round(rect.width) / element.offsetWidth || 1;
1737        var scaleY = round(rect.height) / element.offsetHeight || 1;
1738        return scaleX !== 1 || scaleY !== 1;
1739      }
1740      function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {
1741        if (isFixed === void 0) {
1742          isFixed = false;
1743        }
1744        var isOffsetParentAnElement = isHTMLElement(offsetParent);
1745        var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);
1746        var documentElement = getDocumentElement(offsetParent);
1747        var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled);
1748        var scroll = {
1749          scrollLeft: 0,
1750          scrollTop: 0
1751        };
1752        var offsets = {
1753          x: 0,
1754          y: 0
1755        };
1756        if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {
1757          if (getNodeName(offsetParent) !== "body" || // https://github.com/popperjs/popper-core/issues/1078
1758          isScrollParent(documentElement)) {
1759            scroll = getNodeScroll(offsetParent);
1760          }
1761          if (isHTMLElement(offsetParent)) {
1762            offsets = getBoundingClientRect(offsetParent, true);
1763            offsets.x += offsetParent.clientLeft;
1764            offsets.y += offsetParent.clientTop;
1765          } else if (documentElement) {
1766            offsets.x = getWindowScrollBarX(documentElement);
1767          }
1768        }
1769        return {
1770          x: rect.left + scroll.scrollLeft - offsets.x,
1771          y: rect.top + scroll.scrollTop - offsets.y,
1772          width: rect.width,
1773          height: rect.height
1774        };
1775      }
1776      function getLayoutRect(element) {
1777        var clientRect = getBoundingClientRect(element);
1778        var width = element.offsetWidth;
1779        var height = element.offsetHeight;
1780        if (Math.abs(clientRect.width - width) <= 1) {
1781          width = clientRect.width;
1782        }
1783        if (Math.abs(clientRect.height - height) <= 1) {
1784          height = clientRect.height;
1785        }
1786        return {
1787          x: element.offsetLeft,
1788          y: element.offsetTop,
1789          width,
1790          height
1791        };
1792      }
1793      function getParentNode(element) {
1794        if (getNodeName(element) === "html") {
1795          return element;
1796        }
1797        return (
1798          // this is a quicker (but less type safe) way to save quite some bytes from the bundle
1799          // $FlowFixMe[incompatible-return]
1800          // $FlowFixMe[prop-missing]
1801          element.assignedSlot || // step into the shadow DOM of the parent of a slotted node
1802          element.parentNode || // DOM Element detected
1803          (isShadowRoot(element) ? element.host : null) || // ShadowRoot detected
1804          // $FlowFixMe[incompatible-call]: HTMLElement is a Node
1805          getDocumentElement(element)
1806        );
1807      }
1808      function getScrollParent(node) {
1809        if (["html", "body", "#document"].indexOf(getNodeName(node)) >= 0) {
1810          return node.ownerDocument.body;
1811        }
1812        if (isHTMLElement(node) && isScrollParent(node)) {
1813          return node;
1814        }
1815        return getScrollParent(getParentNode(node));
1816      }
1817      function listScrollParents(element, list) {
1818        var _element$ownerDocumen;
1819        if (list === void 0) {
1820          list = [];
1821        }
1822        var scrollParent = getScrollParent(element);
1823        var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);
1824        var win = getWindow(scrollParent);
vendor: 4,320 bytes, lines 1825-1920
1825        var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;
1826        var updatedList = list.concat(target);
1827        return isBody ? updatedList : (
1828          // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here
1829          updatedList.concat(listScrollParents(getParentNode(target)))
1830        );
1831      }
1832      function isTableElement(element) {
1833        return ["table", "td", "th"].indexOf(getNodeName(element)) >= 0;
1834      }
1835      function getTrueOffsetParent(element) {
1836        if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837
1837        getComputedStyle2(element).position === "fixed") {
1838          return null;
1839        }
1840        return element.offsetParent;
1841      }
1842      function getContainingBlock(element) {
1843        var isFirefox = navigator.userAgent.toLowerCase().indexOf("firefox") !== -1;
1844        var isIE = navigator.userAgent.indexOf("Trident") !== -1;
1845        if (isIE && isHTMLElement(element)) {
1846          var elementCss = getComputedStyle2(element);
1847          if (elementCss.position === "fixed") {
1848            return null;
1849          }
1850        }
1851        var currentNode = getParentNode(element);
1852        while (isHTMLElement(currentNode) && ["html", "body"].indexOf(getNodeName(currentNode)) < 0) {
1853          var css = getComputedStyle2(currentNode);
1854          if (css.transform !== "none" || css.perspective !== "none" || css.contain === "paint" || ["transform", "perspective"].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === "filter" || isFirefox && css.filter && css.filter !== "none") {
1855            return currentNode;
1856          } else {
1857            currentNode = currentNode.parentNode;
1858          }
1859        }
1860        return null;
1861      }
1862      function getOffsetParent(element) {
1863        var window2 = getWindow(element);
1864        var offsetParent = getTrueOffsetParent(element);
1865        while (offsetParent && isTableElement(offsetParent) && getComputedStyle2(offsetParent).position === "static") {
1866          offsetParent = getTrueOffsetParent(offsetParent);
1867        }
1868        if (offsetParent && (getNodeName(offsetParent) === "html" || getNodeName(offsetParent) === "body" && getComputedStyle2(offsetParent).position === "static")) {
1869          return window2;
1870        }
1871        return offsetParent || getContainingBlock(element) || window2;
1872      }
1873      var top = "top";
1874      var bottom = "bottom";
1875      var right = "right";
1876      var left = "left";
1877      var auto = "auto";
1878      var basePlacements = [top, bottom, right, left];
1879      var start = "start";
1880      var end = "end";
1881      var clippingParents = "clippingParents";
1882      var viewport = "viewport";
1883      var popper = "popper";
1884      var reference = "reference";
1885      var variationPlacements = /* @__PURE__ */ basePlacements.reduce(function(acc, placement) {
1886        return acc.concat([placement + "-" + start, placement + "-" + end]);
1887      }, []);
1888      var placements = /* @__PURE__ */ [].concat(basePlacements, [auto]).reduce(function(acc, placement) {
1889        return acc.concat([placement, placement + "-" + start, placement + "-" + end]);
1890      }, []);
1891      var beforeRead = "beforeRead";
1892      var read = "read";
1893      var afterRead = "afterRead";
1894      var beforeMain = "beforeMain";
1895      var main = "main";
1896      var afterMain = "afterMain";
1897      var beforeWrite = "beforeWrite";
1898      var write = "write";
1899      var afterWrite = "afterWrite";
1900      var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];
1901      function order(modifiers) {
1902        var map = /* @__PURE__ */ new Map();
1903        var visited = /* @__PURE__ */ new Set();
1904        var result = [];
1905        modifiers.forEach(function(modifier) {
1906          map.set(modifier.name, modifier);
1907        });
1908        function sort(modifier) {
1909          visited.add(modifier.name);
1910          var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);
1911          requires.forEach(function(dep) {
1912            if (!visited.has(dep)) {
1913              var depModifier = map.get(dep);
1914              if (depModifier) {
1915                sort(depModifier);
1916              }
1917            }
1918          });
1919          result.push(modifier);
1920        }
vendor: 5,852 bytes, lines 1921-2053
1921        modifiers.forEach(function(modifier) {
1922          if (!visited.has(modifier.name)) {
1923            sort(modifier);
1924          }
1925        });
1926        return result;
1927      }
1928      function orderModifiers(modifiers) {
1929        var orderedModifiers = order(modifiers);
1930        return modifierPhases.reduce(function(acc, phase) {
1931          return acc.concat(orderedModifiers.filter(function(modifier) {
1932            return modifier.phase === phase;
1933          }));
1934        }, []);
1935      }
1936      function debounce(fn) {
1937        var pending;
1938        return function() {
1939          if (!pending) {
1940            pending = new Promise(function(resolve) {
1941              Promise.resolve().then(function() {
1942                pending = void 0;
1943                resolve(fn());
1944              });
1945            });
1946          }
1947          return pending;
1948        };
1949      }
1950      function format(str) {
1951        for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
1952          args[_key - 1] = arguments[_key];
1953        }
1954        return [].concat(args).reduce(function(p, c) {
1955          return p.replace(/%s/, c);
1956        }, str);
1957      }
1958      var INVALID_MODIFIER_ERROR = 'Popper: modifier "%s" provided an invalid %s property, expected %s but got %s';
1959      var MISSING_DEPENDENCY_ERROR = 'Popper: modifier "%s" requires "%s", but "%s" modifier is not available';
1960      var VALID_PROPERTIES = ["name", "enabled", "phase", "fn", "effect", "requires", "options"];
1961      function validateModifiers(modifiers) {
1962        modifiers.forEach(function(modifier) {
1963          [].concat(Object.keys(modifier), VALID_PROPERTIES).filter(function(value, index, self) {
1964            return self.indexOf(value) === index;
1965          }).forEach(function(key) {
1966            switch (key) {
1967              case "name":
1968                if (typeof modifier.name !== "string") {
1969                  console.error(format(INVALID_MODIFIER_ERROR, String(modifier.name), '"name"', '"string"', '"' + String(modifier.name) + '"'));
1970                }
1971                break;
1972              case "enabled":
1973                if (typeof modifier.enabled !== "boolean") {
1974                  console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"enabled"', '"boolean"', '"' + String(modifier.enabled) + '"'));
1975                }
1976                break;
1977              case "phase":
1978                if (modifierPhases.indexOf(modifier.phase) < 0) {
1979                  console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"phase"', "either " + modifierPhases.join(", "), '"' + String(modifier.phase) + '"'));
1980                }
1981                break;
1982              case "fn":
1983                if (typeof modifier.fn !== "function") {
1984                  console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"fn"', '"function"', '"' + String(modifier.fn) + '"'));
1985                }
1986                break;
1987              case "effect":
1988                if (modifier.effect != null && typeof modifier.effect !== "function") {
1989                  console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"effect"', '"function"', '"' + String(modifier.fn) + '"'));
1990                }
1991                break;
1992              case "requires":
1993                if (modifier.requires != null && !Array.isArray(modifier.requires)) {
1994                  console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"requires"', '"array"', '"' + String(modifier.requires) + '"'));
1995                }
1996                break;
1997              case "requiresIfExists":
1998                if (!Array.isArray(modifier.requiresIfExists)) {
1999                  console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"requiresIfExists"', '"array"', '"' + String(modifier.requiresIfExists) + '"'));
2000                }
2001                break;
2002              case "options":
2003              case "data":
2004                break;
2005              default:
2006                console.error('PopperJS: an invalid property has been provided to the "' + modifier.name + '" modifier, valid properties are ' + VALID_PROPERTIES.map(function(s) {
2007                  return '"' + s + '"';
2008                }).join(", ") + '; but "' + key + '" was provided.');
2009            }
2010            modifier.requires && modifier.requires.forEach(function(requirement) {
2011              if (modifiers.find(function(mod) {
2012                return mod.name === requirement;
2013              }) == null) {
2014                console.error(format(MISSING_DEPENDENCY_ERROR, String(modifier.name), requirement, requirement));
2015              }
2016            });
2017          });
2018        });
2019      }
2020      function uniqueBy(arr, fn) {
2021        var identifiers = /* @__PURE__ */ new Set();
2022        return arr.filter(function(item) {
2023          var identifier = fn(item);
2024          if (!identifiers.has(identifier)) {
2025            identifiers.add(identifier);
2026            return true;
2027          }
2028        });
2029      }
2030      function getBasePlacement(placement) {
2031        return placement.split("-")[0];
2032      }
2033      function mergeByName(modifiers) {
2034        var merged = modifiers.reduce(function(merged2, current) {
2035          var existing = merged2[current.name];
2036          merged2[current.name] = existing ? Object.assign({}, existing, current, {
2037            options: Object.assign({}, existing.options, current.options),
2038            data: Object.assign({}, existing.data, current.data)
2039          }) : current;
2040          return merged2;
2041        }, {});
2042        return Object.keys(merged).map(function(key) {
2043          return merged[key];
2044        });
2045      }
2046      function getViewportRect(element) {
2047        var win = getWindow(element);
2048        var html = getDocumentElement(element);
2049        var visualViewport = win.visualViewport;
2050        var width = html.clientWidth;
2051        var height = html.clientHeight;
2052        var x = 0;
2053        var y = 0;
vendor: 11,597 bytes, lines 2054-2303
2054        if (visualViewport) {
2055          width = visualViewport.width;
2056          height = visualViewport.height;
2057          if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {
2058            x = visualViewport.offsetLeft;
2059            y = visualViewport.offsetTop;
2060          }
2061        }
2062        return {
2063          width,
2064          height,
2065          x: x + getWindowScrollBarX(element),
2066          y
2067        };
2068      }
2069      function getDocumentRect(element) {
2070        var _element$ownerDocumen;
2071        var html = getDocumentElement(element);
2072        var winScroll = getWindowScroll(element);
2073        var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;
2074        var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);
2075        var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);
2076        var x = -winScroll.scrollLeft + getWindowScrollBarX(element);
2077        var y = -winScroll.scrollTop;
2078        if (getComputedStyle2(body || html).direction === "rtl") {
2079          x += max(html.clientWidth, body ? body.clientWidth : 0) - width;
2080        }
2081        return {
2082          width,
2083          height,
2084          x,
2085          y
2086        };
2087      }
2088      function contains(parent, child) {
2089        var rootNode = child.getRootNode && child.getRootNode();
2090        if (parent.contains(child)) {
2091          return true;
2092        } else if (rootNode && isShadowRoot(rootNode)) {
2093          var next = child;
2094          do {
2095            if (next && parent.isSameNode(next)) {
2096              return true;
2097            }
2098            next = next.parentNode || next.host;
2099          } while (next);
2100        }
2101        return false;
2102      }
2103      function rectToClientRect(rect) {
2104        return Object.assign({}, rect, {
2105          left: rect.x,
2106          top: rect.y,
2107          right: rect.x + rect.width,
2108          bottom: rect.y + rect.height
2109        });
2110      }
2111      function getInnerBoundingClientRect(element) {
2112        var rect = getBoundingClientRect(element);
2113        rect.top = rect.top + element.clientTop;
2114        rect.left = rect.left + element.clientLeft;
2115        rect.bottom = rect.top + element.clientHeight;
2116        rect.right = rect.left + element.clientWidth;
2117        rect.width = element.clientWidth;
2118        rect.height = element.clientHeight;
2119        rect.x = rect.left;
2120        rect.y = rect.top;
2121        return rect;
2122      }
2123      function getClientRectFromMixedType(element, clippingParent) {
2124        return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isElement2(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element)));
2125      }
2126      function getClippingParents(element) {
2127        var clippingParents2 = listScrollParents(getParentNode(element));
2128        var canEscapeClipping = ["absolute", "fixed"].indexOf(getComputedStyle2(element).position) >= 0;
2129        var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;
2130        if (!isElement2(clipperElement)) {
2131          return [];
2132        }
2133        return clippingParents2.filter(function(clippingParent) {
2134          return isElement2(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== "body" && (canEscapeClipping ? getComputedStyle2(clippingParent).position !== "static" : true);
2135        });
2136      }
2137      function getClippingRect(element, boundary, rootBoundary) {
2138        var mainClippingParents = boundary === "clippingParents" ? getClippingParents(element) : [].concat(boundary);
2139        var clippingParents2 = [].concat(mainClippingParents, [rootBoundary]);
2140        var firstClippingParent = clippingParents2[0];
2141        var clippingRect = clippingParents2.reduce(function(accRect, clippingParent) {
2142          var rect = getClientRectFromMixedType(element, clippingParent);
2143          accRect.top = max(rect.top, accRect.top);
2144          accRect.right = min(rect.right, accRect.right);
2145          accRect.bottom = min(rect.bottom, accRect.bottom);
2146          accRect.left = max(rect.left, accRect.left);
2147          return accRect;
2148        }, getClientRectFromMixedType(element, firstClippingParent));
2149        clippingRect.width = clippingRect.right - clippingRect.left;
2150        clippingRect.height = clippingRect.bottom - clippingRect.top;
2151        clippingRect.x = clippingRect.left;
2152        clippingRect.y = clippingRect.top;
2153        return clippingRect;
2154      }
2155      function getVariation(placement) {
2156        return placement.split("-")[1];
2157      }
2158      function getMainAxisFromPlacement(placement) {
2159        return ["top", "bottom"].indexOf(placement) >= 0 ? "x" : "y";
2160      }
2161      function computeOffsets(_ref) {
2162        var reference2 = _ref.reference, element = _ref.element, placement = _ref.placement;
2163        var basePlacement = placement ? getBasePlacement(placement) : null;
2164        var variation = placement ? getVariation(placement) : null;
2165        var commonX = reference2.x + reference2.width / 2 - element.width / 2;
2166        var commonY = reference2.y + reference2.height / 2 - element.height / 2;
2167        var offsets;
2168        switch (basePlacement) {
2169          case top:
2170            offsets = {
2171              x: commonX,
2172              y: reference2.y - element.height
2173            };
2174            break;
2175          case bottom:
2176            offsets = {
2177              x: commonX,
2178              y: reference2.y + reference2.height
2179            };
2180            break;
2181          case right:
2182            offsets = {
2183              x: reference2.x + reference2.width,
2184              y: commonY
2185            };
2186            break;
2187          case left:
2188            offsets = {
2189              x: reference2.x - element.width,
2190              y: commonY
2191            };
2192            break;
2193          default:
2194            offsets = {
2195              x: reference2.x,
2196              y: reference2.y
2197            };
2198        }
2199        var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;
2200        if (mainAxis != null) {
2201          var len = mainAxis === "y" ? "height" : "width";
2202          switch (variation) {
2203            case start:
2204              offsets[mainAxis] = offsets[mainAxis] - (reference2[len] / 2 - element[len] / 2);
2205              break;
2206            case end:
2207              offsets[mainAxis] = offsets[mainAxis] + (reference2[len] / 2 - element[len] / 2);
2208              break;
2209          }
2210        }
2211        return offsets;
2212      }
2213      function getFreshSideObject() {
2214        return {
2215          top: 0,
2216          right: 0,
2217          bottom: 0,
2218          left: 0
2219        };
2220      }
2221      function mergePaddingObject(paddingObject) {
2222        return Object.assign({}, getFreshSideObject(), paddingObject);
2223      }
2224      function expandToHashMap(value, keys) {
2225        return keys.reduce(function(hashMap, key) {
2226          hashMap[key] = value;
2227          return hashMap;
2228        }, {});
2229      }
2230      function detectOverflow(state, options) {
2231        if (options === void 0) {
2232          options = {};
2233        }
2234        var _options = options, _options$placement = _options.placement, placement = _options$placement === void 0 ? state.placement : _options$placement, _options$boundary = _options.boundary, boundary = _options$boundary === void 0 ? clippingParents : _options$boundary, _options$rootBoundary = _options.rootBoundary, rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary, _options$elementConte = _options.elementContext, elementContext = _options$elementConte === void 0 ? popper : _options$elementConte, _options$altBoundary = _options.altBoundary, altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary, _options$padding = _options.padding, padding = _options$padding === void 0 ? 0 : _options$padding;
2235        var paddingObject = mergePaddingObject(typeof padding !== "number" ? padding : expandToHashMap(padding, basePlacements));
2236        var altContext = elementContext === popper ? reference : popper;
2237        var popperRect = state.rects.popper;
2238        var element = state.elements[altBoundary ? altContext : elementContext];
2239        var clippingClientRect = getClippingRect(isElement2(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary);
2240        var referenceClientRect = getBoundingClientRect(state.elements.reference);
2241        var popperOffsets2 = computeOffsets({
2242          reference: referenceClientRect,
2243          element: popperRect,
2244          strategy: "absolute",
2245          placement
2246        });
2247        var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets2));
2248        var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect;
2249        var overflowOffsets = {
2250          top: clippingClientRect.top - elementClientRect.top + paddingObject.top,
2251          bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,
2252          left: clippingClientRect.left - elementClientRect.left + paddingObject.left,
2253          right: elementClientRect.right - clippingClientRect.right + paddingObject.right
2254        };
2255        var offsetData = state.modifiersData.offset;
2256        if (elementContext === popper && offsetData) {
2257          var offset2 = offsetData[placement];
2258          Object.keys(overflowOffsets).forEach(function(key) {
2259            var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;
2260            var axis = [top, bottom].indexOf(key) >= 0 ? "y" : "x";
2261            overflowOffsets[key] += offset2[axis] * multiply;
2262          });
2263        }
2264        return overflowOffsets;
2265      }
2266      var INVALID_ELEMENT_ERROR = "Popper: Invalid reference or popper argument provided. They must be either a DOM element or virtual element.";
2267      var INFINITE_LOOP_ERROR = "Popper: An infinite loop in the modifiers cycle has been detected! The cycle has been interrupted to prevent a browser crash.";
2268      var DEFAULT_OPTIONS = {
2269        placement: "bottom",
2270        modifiers: [],
2271        strategy: "absolute"
2272      };
2273      function areValidElements() {
2274        for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
2275          args[_key] = arguments[_key];
2276        }
2277        return !args.some(function(element) {
2278          return !(element && typeof element.getBoundingClientRect === "function");
2279        });
2280      }
2281      function popperGenerator(generatorOptions) {
2282        if (generatorOptions === void 0) {
2283          generatorOptions = {};
2284        }
2285        var _generatorOptions = generatorOptions, _generatorOptions$def = _generatorOptions.defaultModifiers, defaultModifiers2 = _generatorOptions$def === void 0 ? [] : _generatorOptions$def, _generatorOptions$def2 = _generatorOptions.defaultOptions, defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;
2286        return function createPopper3(reference2, popper2, options) {
2287          if (options === void 0) {
2288            options = defaultOptions;
2289          }
2290          var state = {
2291            placement: "bottom",
2292            orderedModifiers: [],
2293            options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),
2294            modifiersData: {},
2295            elements: {
2296              reference: reference2,
2297              popper: popper2
2298            },
2299            attributes: {},
2300            styles: {}
2301          };
2302          var effectCleanupFns = [];
2303          var isDestroyed = false;
vendor: 4,183 bytes, lines 2304-2378
2304          var instance = {
2305            state,
2306            setOptions: function setOptions(setOptionsAction) {
2307              var options2 = typeof setOptionsAction === "function" ? setOptionsAction(state.options) : setOptionsAction;
2308              cleanupModifierEffects();
2309              state.options = Object.assign({}, defaultOptions, state.options, options2);
2310              state.scrollParents = {
2311                reference: isElement2(reference2) ? listScrollParents(reference2) : reference2.contextElement ? listScrollParents(reference2.contextElement) : [],
2312                popper: listScrollParents(popper2)
2313              };
2314              var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers2, state.options.modifiers)));
2315              state.orderedModifiers = orderedModifiers.filter(function(m) {
2316                return m.enabled;
2317              });
2318              if (true) {
2319                var modifiers = uniqueBy([].concat(orderedModifiers, state.options.modifiers), function(_ref) {
2320                  var name = _ref.name;
2321                  return name;
2322                });
2323                validateModifiers(modifiers);
2324                if (getBasePlacement(state.options.placement) === auto) {
2325                  var flipModifier = state.orderedModifiers.find(function(_ref2) {
2326                    var name = _ref2.name;
2327                    return name === "flip";
2328                  });
2329                  if (!flipModifier) {
2330                    console.error(['Popper: "auto" placements require the "flip" modifier be', "present and enabled to work."].join(" "));
2331                  }
2332                }
2333                var _getComputedStyle = getComputedStyle2(popper2), marginTop = _getComputedStyle.marginTop, marginRight = _getComputedStyle.marginRight, marginBottom = _getComputedStyle.marginBottom, marginLeft = _getComputedStyle.marginLeft;
2334                if ([marginTop, marginRight, marginBottom, marginLeft].some(function(margin) {
2335                  return parseFloat(margin);
2336                })) {
2337                  console.warn(['Popper: CSS "margin" styles cannot be used to apply padding', "between the popper and its reference element or boundary.", "To replicate margin, use the `offset` modifier, as well as", "the `padding` option in the `preventOverflow` and `flip`", "modifiers."].join(" "));
2338                }
2339              }
2340              runModifierEffects();
2341              return instance.update();
2342            },
2343            // Sync update – it will always be executed, even if not necessary. This
2344            // is useful for low frequency updates where sync behavior simplifies the
2345            // logic.
2346            // For high frequency updates (e.g. `resize` and `scroll` events), always
2347            // prefer the async Popper#update method
2348            forceUpdate: function forceUpdate() {
2349              if (isDestroyed) {
2350                return;
2351              }
2352              var _state$elements = state.elements, reference3 = _state$elements.reference, popper3 = _state$elements.popper;
2353              if (!areValidElements(reference3, popper3)) {
2354                if (true) {
2355                  console.error(INVALID_ELEMENT_ERROR);
2356                }
2357                return;
2358              }
2359              state.rects = {
2360                reference: getCompositeRect(reference3, getOffsetParent(popper3), state.options.strategy === "fixed"),
2361                popper: getLayoutRect(popper3)
2362              };
2363              state.reset = false;
2364              state.placement = state.options.placement;
2365              state.orderedModifiers.forEach(function(modifier) {
2366                return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);
2367              });
2368              var __debug_loops__ = 0;
2369              for (var index = 0; index < state.orderedModifiers.length; index++) {
2370                if (true) {
2371                  __debug_loops__ += 1;
2372                  if (__debug_loops__ > 100) {
2373                    console.error(INFINITE_LOOP_ERROR);
2374                    break;
2375                  }
2376                }
2377                if (state.reset === true) {
2378                  state.reset = false;
vendor: 5,583 bytes, lines 2379-2521
2379                  index = -1;
2380                  continue;
2381                }
2382                var _state$orderedModifie = state.orderedModifiers[index], fn = _state$orderedModifie.fn, _state$orderedModifie2 = _state$orderedModifie.options, _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2, name = _state$orderedModifie.name;
2383                if (typeof fn === "function") {
2384                  state = fn({
2385                    state,
2386                    options: _options,
2387                    name,
2388                    instance
2389                  }) || state;
2390                }
2391              }
2392            },
2393            // Async and optimistically optimized update – it will not be executed if
2394            // not necessary (debounced to run at most once-per-tick)
2395            update: debounce(function() {
2396              return new Promise(function(resolve) {
2397                instance.forceUpdate();
2398                resolve(state);
2399              });
2400            }),
2401            destroy: function destroy() {
2402              cleanupModifierEffects();
2403              isDestroyed = true;
2404            }
2405          };
2406          if (!areValidElements(reference2, popper2)) {
2407            if (true) {
2408              console.error(INVALID_ELEMENT_ERROR);
2409            }
2410            return instance;
2411          }
2412          instance.setOptions(options).then(function(state2) {
2413            if (!isDestroyed && options.onFirstUpdate) {
2414              options.onFirstUpdate(state2);
2415            }
2416          });
2417          function runModifierEffects() {
2418            state.orderedModifiers.forEach(function(_ref3) {
2419              var name = _ref3.name, _ref3$options = _ref3.options, options2 = _ref3$options === void 0 ? {} : _ref3$options, effect2 = _ref3.effect;
2420              if (typeof effect2 === "function") {
2421                var cleanupFn = effect2({
2422                  state,
2423                  name,
2424                  instance,
2425                  options: options2
2426                });
2427                var noopFn = function noopFn2() {
2428                };
2429                effectCleanupFns.push(cleanupFn || noopFn);
2430              }
2431            });
2432          }
2433          function cleanupModifierEffects() {
2434            effectCleanupFns.forEach(function(fn) {
2435              return fn();
2436            });
2437            effectCleanupFns = [];
2438          }
2439          return instance;
2440        };
2441      }
2442      var passive = {
2443        passive: true
2444      };
2445      function effect$2(_ref) {
2446        var state = _ref.state, instance = _ref.instance, options = _ref.options;
2447        var _options$scroll = options.scroll, scroll = _options$scroll === void 0 ? true : _options$scroll, _options$resize = options.resize, resize = _options$resize === void 0 ? true : _options$resize;
2448        var window2 = getWindow(state.elements.popper);
2449        var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);
2450        if (scroll) {
2451          scrollParents.forEach(function(scrollParent) {
2452            scrollParent.addEventListener("scroll", instance.update, passive);
2453          });
2454        }
2455        if (resize) {
2456          window2.addEventListener("resize", instance.update, passive);
2457        }
2458        return function() {
2459          if (scroll) {
2460            scrollParents.forEach(function(scrollParent) {
2461              scrollParent.removeEventListener("scroll", instance.update, passive);
2462            });
2463          }
2464          if (resize) {
2465            window2.removeEventListener("resize", instance.update, passive);
2466          }
2467        };
2468      }
2469      var eventListeners = {
2470        name: "eventListeners",
2471        enabled: true,
2472        phase: "write",
2473        fn: function fn() {
2474        },
2475        effect: effect$2,
2476        data: {}
2477      };
2478      function popperOffsets(_ref) {
2479        var state = _ref.state, name = _ref.name;
2480        state.modifiersData[name] = computeOffsets({
2481          reference: state.rects.reference,
2482          element: state.rects.popper,
2483          strategy: "absolute",
2484          placement: state.placement
2485        });
2486      }
2487      var popperOffsets$1 = {
2488        name: "popperOffsets",
2489        enabled: true,
2490        phase: "read",
2491        fn: popperOffsets,
2492        data: {}
2493      };
2494      var unsetSides = {
2495        top: "auto",
2496        right: "auto",
2497        bottom: "auto",
2498        left: "auto"
2499      };
2500      function roundOffsetsByDPR(_ref) {
2501        var x = _ref.x, y = _ref.y;
2502        var win = window;
2503        var dpr = win.devicePixelRatio || 1;
2504        return {
2505          x: round(x * dpr) / dpr || 0,
2506          y: round(y * dpr) / dpr || 0
2507        };
2508      }
2509      function mapToStyles(_ref2) {
2510        var _Object$assign2;
2511        var popper2 = _ref2.popper, popperRect = _ref2.popperRect, placement = _ref2.placement, variation = _ref2.variation, offsets = _ref2.offsets, position = _ref2.position, gpuAcceleration = _ref2.gpuAcceleration, adaptive = _ref2.adaptive, roundOffsets = _ref2.roundOffsets, isFixed = _ref2.isFixed;
2512        var _ref3 = roundOffsets === true ? roundOffsetsByDPR(offsets) : typeof roundOffsets === "function" ? roundOffsets(offsets) : offsets, _ref3$x = _ref3.x, x = _ref3$x === void 0 ? 0 : _ref3$x, _ref3$y = _ref3.y, y = _ref3$y === void 0 ? 0 : _ref3$y;
2513        var hasX = offsets.hasOwnProperty("x");
2514        var hasY = offsets.hasOwnProperty("y");
2515        var sideX = left;
2516        var sideY = top;
2517        var win = window;
2518        if (adaptive) {
2519          var offsetParent = getOffsetParent(popper2);
2520          var heightProp = "clientHeight";
2521          var widthProp = "clientWidth";
2522          if (offsetParent === getWindow(popper2)) {
2523            offsetParent = getDocumentElement(popper2);
2524            if (getComputedStyle2(offsetParent).position !== "static" && position === "absolute") {
2525              heightProp = "scrollHeight";
2526              widthProp = "scrollWidth";
2527            }
2528          }
2529          offsetParent = offsetParent;
2530          if (placement === top || (placement === left || placement === right) && variation === end) {
2531            sideY = bottom;
2532            var offsetY = isFixed && win.visualViewport ? win.visualViewport.height : (
2533              // $FlowFixMe[prop-missing]
2534              offsetParent[heightProp]
2535            );
2536            y -= offsetY - popperRect.height;
2537            y *= gpuAcceleration ? 1 : -1;
2538          }
2539          if (placement === left || (placement === top || placement === bottom) && variation === end) {
2540            sideX = right;
2541            var offsetX = isFixed && win.visualViewport ? win.visualViewport.width : (
2542              // $FlowFixMe[prop-missing]
2543              offsetParent[widthProp]
2544            );
2545            x -= offsetX - popperRect.width;
2546            x *= gpuAcceleration ? 1 : -1;
2547          }
2548        }
2549        var commonStyles = Object.assign({
2550          position
2551        }, adaptive && unsetSides);
2552        if (gpuAcceleration) {
2553          var _Object$assign;
2554          return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? "0" : "", _Object$assign[sideX] = hasX ? "0" : "", _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? "translate(" + x + "px, " + y + "px)" : "translate3d(" + x + "px, " + y + "px, 0)", _Object$assign));
2555        }
2556        return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + "px" : "", _Object$assign2[sideX] = hasX ? x + "px" : "", _Object$assign2.transform = "", _Object$assign2));
2557      }
2558      function computeStyles(_ref4) {
2559        var state = _ref4.state, options = _ref4.options;
2560        var _options$gpuAccelerat = options.gpuAcceleration, gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat, _options$adaptive = options.adaptive, adaptive = _options$adaptive === void 0 ? true : _options$adaptive, _options$roundOffsets = options.roundOffsets, roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;
2561        if (true) {
2562          var transitionProperty = getComputedStyle2(state.elements.popper).transitionProperty || "";
2563          if (adaptive && ["transform", "top", "right", "bottom", "left"].some(function(property) {
2564            return transitionProperty.indexOf(property) >= 0;
2565          })) {
2566            console.warn(["Popper: Detected CSS transitions on at least one of the following", 'CSS properties: "transform", "top", "right", "bottom", "left".', "\n\n", 'Disable the "computeStyles" modifier\'s `adaptive` option to allow', "for smooth transitions, or remove these properties from the CSS", "transition declaration on the popper element if only transitioning", "opacity or background-color for example.", "\n\n", "We recommend using the popper element as a wrapper around an inner", "element that can have any CSS property transitioned for animations."].join(" "));
2567          }
2568        }
2569        var commonStyles = {
2570          placement: getBasePlacement(state.placement),
2571          variation: getVariation(state.placement),
2572          popper: state.elements.popper,
2573          popperRect: state.rects.popper,
2574          gpuAcceleration,
2575          isFixed: state.options.strategy === "fixed"
2576        };
2577        if (state.modifiersData.popperOffsets != null) {
2578          state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {
2579            offsets: state.modifiersData.popperOffsets,
2580            position: state.options.strategy,
2581            adaptive,
2582            roundOffsets
2583          })));
2584        }
2585        if (state.modifiersData.arrow != null) {
2586          state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {
2587            offsets: state.modifiersData.arrow,
2588            position: "absolute",
2589            adaptive: false,
2590            roundOffsets
2591          })));
2592        }
2593        state.attributes.popper = Object.assign({}, state.attributes.popper, {
2594          "data-popper-placement": state.placement
2595        });
2596      }
2597      var computeStyles$1 = {
2598        name: "computeStyles",
2599        enabled: true,
2600        phase: "beforeWrite",
2601        fn: computeStyles,
2602        data: {}
2603      };
2604      function applyStyles(_ref) {
2605        var state = _ref.state;
vendor: 9,568 bytes, lines 2606-2819
2606        Object.keys(state.elements).forEach(function(name) {
2607          var style = state.styles[name] || {};
2608          var attributes = state.attributes[name] || {};
2609          var element = state.elements[name];
2610          if (!isHTMLElement(element) || !getNodeName(element)) {
2611            return;
2612          }
2613          Object.assign(element.style, style);
2614          Object.keys(attributes).forEach(function(name2) {
2615            var value = attributes[name2];
2616            if (value === false) {
2617              element.removeAttribute(name2);
2618            } else {
2619              element.setAttribute(name2, value === true ? "" : value);
2620            }
2621          });
2622        });
2623      }
2624      function effect$1(_ref2) {
2625        var state = _ref2.state;
2626        var initialStyles = {
2627          popper: {
2628            position: state.options.strategy,
2629            left: "0",
2630            top: "0",
2631            margin: "0"
2632          },
2633          arrow: {
2634            position: "absolute"
2635          },
2636          reference: {}
2637        };
2638        Object.assign(state.elements.popper.style, initialStyles.popper);
2639        state.styles = initialStyles;
2640        if (state.elements.arrow) {
2641          Object.assign(state.elements.arrow.style, initialStyles.arrow);
2642        }
2643        return function() {
2644          Object.keys(state.elements).forEach(function(name) {
2645            var element = state.elements[name];
2646            var attributes = state.attributes[name] || {};
2647            var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]);
2648            var style = styleProperties.reduce(function(style2, property) {
2649              style2[property] = "";
2650              return style2;
2651            }, {});
2652            if (!isHTMLElement(element) || !getNodeName(element)) {
2653              return;
2654            }
2655            Object.assign(element.style, style);
2656            Object.keys(attributes).forEach(function(attribute) {
2657              element.removeAttribute(attribute);
2658            });
2659          });
2660        };
2661      }
2662      var applyStyles$1 = {
2663        name: "applyStyles",
2664        enabled: true,
2665        phase: "write",
2666        fn: applyStyles,
2667        effect: effect$1,
2668        requires: ["computeStyles"]
2669      };
2670      function distanceAndSkiddingToXY(placement, rects, offset2) {
2671        var basePlacement = getBasePlacement(placement);
2672        var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;
2673        var _ref = typeof offset2 === "function" ? offset2(Object.assign({}, rects, {
2674          placement
2675        })) : offset2, skidding = _ref[0], distance = _ref[1];
2676        skidding = skidding || 0;
2677        distance = (distance || 0) * invertDistance;
2678        return [left, right].indexOf(basePlacement) >= 0 ? {
2679          x: distance,
2680          y: skidding
2681        } : {
2682          x: skidding,
2683          y: distance
2684        };
2685      }
2686      function offset(_ref2) {
2687        var state = _ref2.state, options = _ref2.options, name = _ref2.name;
2688        var _options$offset = options.offset, offset2 = _options$offset === void 0 ? [0, 0] : _options$offset;
2689        var data = placements.reduce(function(acc, placement) {
2690          acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset2);
2691          return acc;
2692        }, {});
2693        var _data$state$placement = data[state.placement], x = _data$state$placement.x, y = _data$state$placement.y;
2694        if (state.modifiersData.popperOffsets != null) {
2695          state.modifiersData.popperOffsets.x += x;
2696          state.modifiersData.popperOffsets.y += y;
2697        }
2698        state.modifiersData[name] = data;
2699      }
2700      var offset$1 = {
2701        name: "offset",
2702        enabled: true,
2703        phase: "main",
2704        requires: ["popperOffsets"],
2705        fn: offset
2706      };
2707      var hash$1 = {
2708        left: "right",
2709        right: "left",
2710        bottom: "top",
2711        top: "bottom"
2712      };
2713      function getOppositePlacement(placement) {
2714        return placement.replace(/left|right|bottom|top/g, function(matched) {
2715          return hash$1[matched];
2716        });
2717      }
2718      var hash = {
2719        start: "end",
2720        end: "start"
2721      };
2722      function getOppositeVariationPlacement(placement) {
2723        return placement.replace(/start|end/g, function(matched) {
2724          return hash[matched];
2725        });
2726      }
2727      function computeAutoPlacement(state, options) {
2728        if (options === void 0) {
2729          options = {};
2730        }
2731        var _options = options, placement = _options.placement, boundary = _options.boundary, rootBoundary = _options.rootBoundary, padding = _options.padding, flipVariations = _options.flipVariations, _options$allowedAutoP = _options.allowedAutoPlacements, allowedAutoPlacements = _options$allowedAutoP === void 0 ? placements : _options$allowedAutoP;
2732        var variation = getVariation(placement);
2733        var placements$1 = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function(placement2) {
2734          return getVariation(placement2) === variation;
2735        }) : basePlacements;
2736        var allowedPlacements = placements$1.filter(function(placement2) {
2737          return allowedAutoPlacements.indexOf(placement2) >= 0;
2738        });
2739        if (allowedPlacements.length === 0) {
2740          allowedPlacements = placements$1;
2741          if (true) {
2742            console.error(["Popper: The `allowedAutoPlacements` option did not allow any", "placements. Ensure the `placement` option matches the variation", "of the allowed placements.", 'For example, "auto" cannot be used to allow "bottom-start".', 'Use "auto-start" instead.'].join(" "));
2743          }
2744        }
2745        var overflows = allowedPlacements.reduce(function(acc, placement2) {
2746          acc[placement2] = detectOverflow(state, {
2747            placement: placement2,
2748            boundary,
2749            rootBoundary,
2750            padding
2751          })[getBasePlacement(placement2)];
2752          return acc;
2753        }, {});
2754        return Object.keys(overflows).sort(function(a, b) {
2755          return overflows[a] - overflows[b];
2756        });
2757      }
2758      function getExpandedFallbackPlacements(placement) {
2759        if (getBasePlacement(placement) === auto) {
2760          return [];
2761        }
2762        var oppositePlacement = getOppositePlacement(placement);
2763        return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];
2764      }
2765      function flip(_ref) {
2766        var state = _ref.state, options = _ref.options, name = _ref.name;
2767        if (state.modifiersData[name]._skip) {
2768          return;
2769        }
2770        var _options$mainAxis = options.mainAxis, checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis, _options$altAxis = options.altAxis, checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis, specifiedFallbackPlacements = options.fallbackPlacements, padding = options.padding, boundary = options.boundary, rootBoundary = options.rootBoundary, altBoundary = options.altBoundary, _options$flipVariatio = options.flipVariations, flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio, allowedAutoPlacements = options.allowedAutoPlacements;
2771        var preferredPlacement = state.options.placement;
2772        var basePlacement = getBasePlacement(preferredPlacement);
2773        var isBasePlacement = basePlacement === preferredPlacement;
2774        var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));
2775        var placements2 = [preferredPlacement].concat(fallbackPlacements).reduce(function(acc, placement2) {
2776          return acc.concat(getBasePlacement(placement2) === auto ? computeAutoPlacement(state, {
2777            placement: placement2,
2778            boundary,
2779            rootBoundary,
2780            padding,
2781            flipVariations,
2782            allowedAutoPlacements
2783          }) : placement2);
2784        }, []);
2785        var referenceRect = state.rects.reference;
2786        var popperRect = state.rects.popper;
2787        var checksMap = /* @__PURE__ */ new Map();
2788        var makeFallbackChecks = true;
2789        var firstFittingPlacement = placements2[0];
2790        for (var i = 0; i < placements2.length; i++) {
2791          var placement = placements2[i];
2792          var _basePlacement = getBasePlacement(placement);
2793          var isStartVariation = getVariation(placement) === start;
2794          var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;
2795          var len = isVertical ? "width" : "height";
2796          var overflow = detectOverflow(state, {
2797            placement,
2798            boundary,
2799            rootBoundary,
2800            altBoundary,
2801            padding
2802          });
2803          var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;
2804          if (referenceRect[len] > popperRect[len]) {
2805            mainVariationSide = getOppositePlacement(mainVariationSide);
2806          }
2807          var altVariationSide = getOppositePlacement(mainVariationSide);
2808          var checks = [];
2809          if (checkMainAxis) {
2810            checks.push(overflow[_basePlacement] <= 0);
2811          }
2812          if (checkAltAxis) {
2813            checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);
2814          }
2815          if (checks.every(function(check) {
2816            return check;
2817          })) {
2818            firstFittingPlacement = placement;
2819            makeFallbackChecks = false;
vendor: 9,128 bytes, lines 2820-2990
2820            break;
2821          }
2822          checksMap.set(placement, checks);
2823        }
2824        if (makeFallbackChecks) {
2825          var numberOfChecks = flipVariations ? 3 : 1;
2826          var _loop = function _loop2(_i2) {
2827            var fittingPlacement = placements2.find(function(placement2) {
2828              var checks2 = checksMap.get(placement2);
2829              if (checks2) {
2830                return checks2.slice(0, _i2).every(function(check) {
2831                  return check;
2832                });
2833              }
2834            });
2835            if (fittingPlacement) {
2836              firstFittingPlacement = fittingPlacement;
2837              return "break";
2838            }
2839          };
2840          for (var _i = numberOfChecks; _i > 0; _i--) {
2841            var _ret = _loop(_i);
2842            if (_ret === "break") break;
2843          }
2844        }
2845        if (state.placement !== firstFittingPlacement) {
2846          state.modifiersData[name]._skip = true;
2847          state.placement = firstFittingPlacement;
2848          state.reset = true;
2849        }
2850      }
2851      var flip$1 = {
2852        name: "flip",
2853        enabled: true,
2854        phase: "main",
2855        fn: flip,
2856        requiresIfExists: ["offset"],
2857        data: {
2858          _skip: false
2859        }
2860      };
2861      function getAltAxis(axis) {
2862        return axis === "x" ? "y" : "x";
2863      }
2864      function within(min$1, value, max$1) {
2865        return max(min$1, min(value, max$1));
2866      }
2867      function withinMaxClamp(min2, value, max2) {
2868        var v = within(min2, value, max2);
2869        return v > max2 ? max2 : v;
2870      }
2871      function preventOverflow(_ref) {
2872        var state = _ref.state, options = _ref.options, name = _ref.name;
2873        var _options$mainAxis = options.mainAxis, checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis, _options$altAxis = options.altAxis, checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis, boundary = options.boundary, rootBoundary = options.rootBoundary, altBoundary = options.altBoundary, padding = options.padding, _options$tether = options.tether, tether = _options$tether === void 0 ? true : _options$tether, _options$tetherOffset = options.tetherOffset, tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;
2874        var overflow = detectOverflow(state, {
2875          boundary,
2876          rootBoundary,
2877          padding,
2878          altBoundary
2879        });
2880        var basePlacement = getBasePlacement(state.placement);
2881        var variation = getVariation(state.placement);
2882        var isBasePlacement = !variation;
2883        var mainAxis = getMainAxisFromPlacement(basePlacement);
2884        var altAxis = getAltAxis(mainAxis);
2885        var popperOffsets2 = state.modifiersData.popperOffsets;
2886        var referenceRect = state.rects.reference;
2887        var popperRect = state.rects.popper;
2888        var tetherOffsetValue = typeof tetherOffset === "function" ? tetherOffset(Object.assign({}, state.rects, {
2889          placement: state.placement
2890        })) : tetherOffset;
2891        var normalizedTetherOffsetValue = typeof tetherOffsetValue === "number" ? {
2892          mainAxis: tetherOffsetValue,
2893          altAxis: tetherOffsetValue
2894        } : Object.assign({
2895          mainAxis: 0,
2896          altAxis: 0
2897        }, tetherOffsetValue);
2898        var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;
2899        var data = {
2900          x: 0,
2901          y: 0
2902        };
2903        if (!popperOffsets2) {
2904          return;
2905        }
2906        if (checkMainAxis) {
2907          var _offsetModifierState$;
2908          var mainSide = mainAxis === "y" ? top : left;
2909          var altSide = mainAxis === "y" ? bottom : right;
2910          var len = mainAxis === "y" ? "height" : "width";
2911          var offset2 = popperOffsets2[mainAxis];
2912          var min$1 = offset2 + overflow[mainSide];
2913          var max$1 = offset2 - overflow[altSide];
2914          var additive = tether ? -popperRect[len] / 2 : 0;
2915          var minLen = variation === start ? referenceRect[len] : popperRect[len];
2916          var maxLen = variation === start ? -popperRect[len] : -referenceRect[len];
2917          var arrowElement = state.elements.arrow;
2918          var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {
2919            width: 0,
2920            height: 0
2921          };
2922          var arrowPaddingObject = state.modifiersData["arrow#persistent"] ? state.modifiersData["arrow#persistent"].padding : getFreshSideObject();
2923          var arrowPaddingMin = arrowPaddingObject[mainSide];
2924          var arrowPaddingMax = arrowPaddingObject[altSide];
2925          var arrowLen = within(0, referenceRect[len], arrowRect[len]);
2926          var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;
2927          var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;
2928          var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);
2929          var clientOffset = arrowOffsetParent ? mainAxis === "y" ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;
2930          var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;
2931          var tetherMin = offset2 + minOffset - offsetModifierValue - clientOffset;
2932          var tetherMax = offset2 + maxOffset - offsetModifierValue;
2933          var preventedOffset = within(tether ? min(min$1, tetherMin) : min$1, offset2, tether ? max(max$1, tetherMax) : max$1);
2934          popperOffsets2[mainAxis] = preventedOffset;
2935          data[mainAxis] = preventedOffset - offset2;
2936        }
2937        if (checkAltAxis) {
2938          var _offsetModifierState$2;
2939          var _mainSide = mainAxis === "x" ? top : left;
2940          var _altSide = mainAxis === "x" ? bottom : right;
2941          var _offset = popperOffsets2[altAxis];
2942          var _len = altAxis === "y" ? "height" : "width";
2943          var _min = _offset + overflow[_mainSide];
2944          var _max = _offset - overflow[_altSide];
2945          var isOriginSide = [top, left].indexOf(basePlacement) !== -1;
2946          var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;
2947          var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;
2948          var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;
2949          var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);
2950          popperOffsets2[altAxis] = _preventedOffset;
2951          data[altAxis] = _preventedOffset - _offset;
2952        }
2953        state.modifiersData[name] = data;
2954      }
2955      var preventOverflow$1 = {
2956        name: "preventOverflow",
2957        enabled: true,
2958        phase: "main",
2959        fn: preventOverflow,
2960        requiresIfExists: ["offset"]
2961      };
2962      var toPaddingObject = function toPaddingObject2(padding, state) {
2963        padding = typeof padding === "function" ? padding(Object.assign({}, state.rects, {
2964          placement: state.placement
2965        })) : padding;
2966        return mergePaddingObject(typeof padding !== "number" ? padding : expandToHashMap(padding, basePlacements));
2967      };
2968      function arrow(_ref) {
2969        var _state$modifiersData$;
2970        var state = _ref.state, name = _ref.name, options = _ref.options;
2971        var arrowElement = state.elements.arrow;
2972        var popperOffsets2 = state.modifiersData.popperOffsets;
2973        var basePlacement = getBasePlacement(state.placement);
2974        var axis = getMainAxisFromPlacement(basePlacement);
2975        var isVertical = [left, right].indexOf(basePlacement) >= 0;
2976        var len = isVertical ? "height" : "width";
2977        if (!arrowElement || !popperOffsets2) {
2978          return;
2979        }
2980        var paddingObject = toPaddingObject(options.padding, state);
2981        var arrowRect = getLayoutRect(arrowElement);
2982        var minProp = axis === "y" ? top : left;
2983        var maxProp = axis === "y" ? bottom : right;
2984        var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets2[axis] - state.rects.popper[len];
2985        var startDiff = popperOffsets2[axis] - state.rects.reference[axis];
2986        var arrowOffsetParent = getOffsetParent(arrowElement);
2987        var clientSize = arrowOffsetParent ? axis === "y" ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;
2988        var centerToReference = endDiff / 2 - startDiff / 2;
2989        var min2 = paddingObject[minProp];
2990        var max2 = clientSize - arrowRect[len] - paddingObject[maxPro
vendor: 5,000 bytes, lines 2990-3111
2990p];
2991        var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;
2992        var offset2 = within(min2, center, max2);
2993        var axisProp = axis;
2994        state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset2, _state$modifiersData$.centerOffset = offset2 - center, _state$modifiersData$);
2995      }
2996      function effect(_ref2) {
2997        var state = _ref2.state, options = _ref2.options;
2998        var _options$element = options.element, arrowElement = _options$element === void 0 ? "[data-popper-arrow]" : _options$element;
2999        if (arrowElement == null) {
3000          return;
3001        }
3002        if (typeof arrowElement === "string") {
3003          arrowElement = state.elements.popper.querySelector(arrowElement);
3004          if (!arrowElement) {
3005            return;
3006          }
3007        }
3008        if (true) {
3009          if (!isHTMLElement(arrowElement)) {
3010            console.error(['Popper: "arrow" element must be an HTMLElement (not an SVGElement).', "To use an SVG arrow, wrap it in an HTMLElement that will be used as", "the arrow."].join(" "));
3011          }
3012        }
3013        if (!contains(state.elements.popper, arrowElement)) {
3014          if (true) {
3015            console.error(['Popper: "arrow" modifier\'s `element` must be a child of the popper', "element."].join(" "));
3016          }
3017          return;
3018        }
3019        state.elements.arrow = arrowElement;
3020      }
3021      var arrow$1 = {
3022        name: "arrow",
3023        enabled: true,
3024        phase: "main",
3025        fn: arrow,
3026        effect,
3027        requires: ["popperOffsets"],
3028        requiresIfExists: ["preventOverflow"]
3029      };
3030      function getSideOffsets(overflow, rect, preventedOffsets) {
3031        if (preventedOffsets === void 0) {
3032          preventedOffsets = {
3033            x: 0,
3034            y: 0
3035          };
3036        }
3037        return {
3038          top: overflow.top - rect.height - preventedOffsets.y,
3039          right: overflow.right - rect.width + preventedOffsets.x,
3040          bottom: overflow.bottom - rect.height + preventedOffsets.y,
3041          left: overflow.left - rect.width - preventedOffsets.x
3042        };
3043      }
3044      function isAnySideFullyClipped(overflow) {
3045        return [top, right, bottom, left].some(function(side) {
3046          return overflow[side] >= 0;
3047        });
3048      }
3049      function hide(_ref) {
3050        var state = _ref.state, name = _ref.name;
3051        var referenceRect = state.rects.reference;
3052        var popperRect = state.rects.popper;
3053        var preventedOffsets = state.modifiersData.preventOverflow;
3054        var referenceOverflow = detectOverflow(state, {
3055          elementContext: "reference"
3056        });
3057        var popperAltOverflow = detectOverflow(state, {
3058          altBoundary: true
3059        });
3060        var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);
3061        var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);
3062        var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);
3063        var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);
3064        state.modifiersData[name] = {
3065          referenceClippingOffsets,
3066          popperEscapeOffsets,
3067          isReferenceHidden,
3068          hasPopperEscaped
3069        };
3070        state.attributes.popper = Object.assign({}, state.attributes.popper, {
3071          "data-popper-reference-hidden": isReferenceHidden,
3072          "data-popper-escaped": hasPopperEscaped
3073        });
3074      }
3075      var hide$1 = {
3076        name: "hide",
3077        enabled: true,
3078        phase: "main",
3079        requiresIfExists: ["preventOverflow"],
3080        fn: hide
3081      };
3082      var defaultModifiers$1 = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1];
3083      var createPopper$1 = /* @__PURE__ */ popperGenerator({
3084        defaultModifiers: defaultModifiers$1
3085      });
3086      var defaultModifiers = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1, offset$1, flip$1, preventOverflow$1, arrow$1, hide$1];
3087      var createPopper2 = /* @__PURE__ */ popperGenerator({
3088        defaultModifiers
3089      });
3090      exports.applyStyles = applyStyles$1;
3091      exports.arrow = arrow$1;
3092      exports.computeStyles = computeStyles$1;
3093      exports.createPopper = createPopper2;
3094      exports.createPopperLite = createPopper$1;
3095      exports.defaultModifiers = defaultModifiers;
3096      exports.detectOverflow = detectOverflow;
3097      exports.eventListeners = eventListeners;
3098      exports.flip = flip$1;
3099      exports.hide = hide$1;
3100      exports.offset = offset$1;
3101      exports.popperGenerator = popperGenerator;
3102      exports.popperOffsets = popperOffsets$1;
3103      exports.preventOverflow = preventOverflow$1;
3104    }
3105  });
3106
3107  // ns-hugo-imp:/home/ubuntu/.cache/hugo_cache/modules/filecache/modules/pkg/mod/github.com/twbs/[email protected]+incompatible/js/src/dom/data.js
3108  var elementMap = /* @__PURE__ */ new Map();
3109  var data_default = {
3110    set(element, key, instance) {
3111      if (!elementMap.has(element)) {
3112        elementMap.set(element, /* @__PURE__ */ new Map());
3113      }
3114      const instanceMap = elementMap.get(element);
3115      if (!instanceMap.has(key) && instanceMap.size !== 0) {
3116        console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);
3117        return;
3118      }
3119      instanceMap.set(key, instance);
3120    },
3121    get(element, key) {
3122      if (elementMap.has(element)) {
3123        return elementMap.get(element).get(key) || null;
3124      }
3125      return null;
3126    },
3127    remove(element, key) {
3128      if (!elementMap.has(element)) {
3129        return;
3130      }
3131      const instanceMap = elementMap.get(element);
3132      instanceMap.delete(key);
3133      if (instanceMap.size === 0) {
3134        elementMap.delete(element);
3135      }
3136    }
3137  };
3138
3139  // ns-hugo-imp:/home/ubuntu/.cache/hugo_cache/modules/filecache/modules/pkg/mod/github.com/twbs/[email protected]+incompatible/js/src/util/index.js
3140  var MILLISECONDS_MULTIPLIER = 1e3;
3141  var TRANSITION_END = "transitionend";
3142  var parseSelector = (selector) => {
3143    if (selector && window.CSS && window.CSS.escape) {
3144      selector = selector.replace(/#([^\s"#']+)/g, (match, id) => `#${CSS.escape(id)}`);
3145    }
3146    return selector;
3147  };
3148  var toType = (object) => {
3149    if (object === null || object === void 0) {
3150      return `${object}`;
3151    }
3152    return Object.prototype.toString.call(object).match(/\s([a-z]+)/i)[1].toLowerCase();
3153  };
3154  var getTransitionDurationFromElement = (element) => {
3155    if (!element) {
3156      return 0;
3157    }
3158    let { transitionDuration, transitionDelay } = window.getComputedStyle(element);
3159    const floatTransitionDuration = Number.parseFloat(transitionDuration);
3160    const floatTransitionDelay = Number.parseFloat(transitionDelay);
3161    if (!floatTransitionDuration && !floatTransitionDelay) {
3162      return 0;
3163    }
3164    transitionDuration = transitionDuration.split(",")[0];
3165    transitionDelay = transitionDelay.split(",")[0];
3166    return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;
3167  };
3168  var triggerTransitionEnd = (element) => {
3169    element.dispatchEvent(new Event(TRANSITION_END));
3170  };
3171  var isElement = (object) => {
3172    if (!object || typeof object !== "object") {
3173      return false;
3174    }
3175    if (typeof object.jquery !== "undefined") {
3176      object = object[0];
3177    }
3178    return typeof object.nodeType !== "undefined";
3179  };
3180  var getElement = (object) => {
3181    if (isElement(object)) {
3182      return object.jquery ? object[0] : object;
3183    }
3184    if (typeof object === "string" && object.length > 0) {
3185      return document.querySelector(parseSelector(object));
3186    }
3187    return null;
3188  };
3189  var isVisible = (element) => {
3190    if (!isElement(element) || element.getClientRects().length === 0) {
3191      return false;
3192    }
3193    const elementIsVisible = getComputedStyle(element).getPropertyValue("visibility") === "visible";
3194    const closedDetails = element.closest("details:not([open])");
3195    if (!closedDetails) {
3196      return elementIsVisible;
3197    }
3198    if (closedDetails !== element) {
3199      const summary = element.closest("summary");
3200      if (summary && summary.parentNode !== closedDetails) {
3201        return false;
3202      }
3203      if (summary === null) {
3204        return false;
3205      }
3206    }
3207    return elementIsVisible;
3208  };
3209  var isDisabled = (element) => {
3210    if (!element || element.nodeType !== Node.ELEMENT_NODE) {
3211      return true;
3212    }
3213    if (element.classList.contains("disabled")) {
3214      return true;
3215    }
3216    if (typeof element.disabled !== "undefined") {
3217      return element.disabled;
3218    }
3219    return element.hasAttribute("disabled") && element.getAttribute("disabled") !== "false";
3220  };
3221  var noop = () => {
3222  };
3223  var reflow = (element) => {
3224    element.offsetHeight;
3225  };
3226  var getjQuery = () => {
3227    if (window.jQuery && !document.body.hasAttribute("data-bs-no-jquery")) {
3228      return window.jQuery;
3229    }
3230    return null;
3231  };
3232  var DOMContentLoadedCallbacks = [];
3233  var onDOMContentLoaded = (callback) => {
3234    if (document.readyState === "loading") {
3235      if (!DOMContentLoadedCallbacks.length) {
3236        document.addEventListener("DOMContentLoaded", () => {
3237          for (const callback2 of DOMContentLoadedCallbacks) {
3238            callback2();
3239          }
3240        });
3241      }
3242      DOMContentLoadedCallbacks.push(callback);
3243    } else {
3244      callback();
3245    }
3246  };
3247  var isRTL = () => document.documentElement.dir === "rtl";
3248  var defineJQueryPlugin = (plugin) => {
3249    onDOMContentLoaded(() => {
3250      const $ = getjQuery();
3251      if ($) {
3252        const name = plugin.NAME;
3253        const JQUERY_NO_CONFLICT = $.fn[name];
3254        $.fn[name] = plugin.jQueryInterface;
3255        $.fn[name].Constructor = plugin;
3256        $.fn[name].noConflict = () => {
3257          $.fn[name] = JQUERY_NO_CONFLICT;
3258          return plugin.jQueryInterface;
3259        };
3260      }
3261    });
3262  };
3263  var execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {
3264    return typeof possibleCallback === "function" ? possibleCallback(...args) : defaultValue;
3265  };
3266  var executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {
3267    if (!waitForTransition) {
3268      execute(callback);
3269      return;
3270    }
3271    const durationPadding = 5;
3272    const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;
vendor: 13,102 bytes, lines 3273-3653
3273    let called = false;
3274    const handler = ({ target }) => {
3275      if (target !== transitionElement) {
3276        return;
3277      }
3278      called = true;
3279      transitionElement.removeEventListener(TRANSITION_END, handler);
3280      execute(callback);
3281    };
3282    transitionElement.addEventListener(TRANSITION_END, handler);
3283    setTimeout(() => {
3284      if (!called) {
3285        triggerTransitionEnd(transitionElement);
3286      }
3287    }, emulatedDuration);
3288  };
3289  var getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {
3290    const listLength = list.length;
3291    let index = list.indexOf(activeElement);
3292    if (index === -1) {
3293      return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0];
3294    }
3295    index += shouldGetNext ? 1 : -1;
3296    if (isCycleAllowed) {
3297      index = (index + listLength) % listLength;
3298    }
3299    return list[Math.max(0, Math.min(index, listLength - 1))];
3300  };
3301
3302  // ns-hugo-imp:/home/ubuntu/.cache/hugo_cache/modules/filecache/modules/pkg/mod/github.com/twbs/[email protected]+incompatible/js/src/dom/event-handler.js
3303  var namespaceRegex = /[^.]*(?=\..*)\.|.*/;
3304  var stripNameRegex = /\..*/;
3305  var stripUidRegex = /::\d+$/;
3306  var eventRegistry = {};
3307  var uidEvent = 1;
3308  var customEvents = {
3309    mouseenter: "mouseover",
3310    mouseleave: "mouseout"
3311  };
3312  var nativeEvents = /* @__PURE__ */ new Set([
3313    "click",
3314    "dblclick",
3315    "mouseup",
3316    "mousedown",
3317    "contextmenu",
3318    "mousewheel",
3319    "DOMMouseScroll",
3320    "mouseover",
3321    "mouseout",
3322    "mousemove",
3323    "selectstart",
3324    "selectend",
3325    "keydown",
3326    "keypress",
3327    "keyup",
3328    "orientationchange",
3329    "touchstart",
3330    "touchmove",
3331    "touchend",
3332    "touchcancel",
3333    "pointerdown",
3334    "pointermove",
3335    "pointerup",
3336    "pointerleave",
3337    "pointercancel",
3338    "gesturestart",
3339    "gesturechange",
3340    "gestureend",
3341    "focus",
3342    "blur",
3343    "change",
3344    "reset",
3345    "select",
3346    "submit",
3347    "focusin",
3348    "focusout",
3349    "load",
3350    "unload",
3351    "beforeunload",
3352    "resize",
3353    "move",
3354    "DOMContentLoaded",
3355    "readystatechange",
3356    "error",
3357    "abort",
3358    "scroll"
3359  ]);
3360  function makeEventUid(element, uid) {
3361    return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;
3362  }
3363  function getElementEvents(element) {
3364    const uid = makeEventUid(element);
3365    element.uidEvent = uid;
3366    eventRegistry[uid] = eventRegistry[uid] || {};
3367    return eventRegistry[uid];
3368  }
3369  function bootstrapHandler(element, fn) {
3370    return function handler(event) {
3371      hydrateObj(event, { delegateTarget: element });
3372      if (handler.oneOff) {
3373        EventHandler.off(element, event.type, fn);
3374      }
3375      return fn.apply(element, [event]);
3376    };
3377  }
3378  function bootstrapDelegationHandler(element, selector, fn) {
3379    return function handler(event) {
3380      const domElements = element.querySelectorAll(selector);
3381      for (let { target } = event; target && target !== this; target = target.parentNode) {
3382        for (const domElement of domElements) {
3383          if (domElement !== target) {
3384            continue;
3385          }
3386          hydrateObj(event, { delegateTarget: target });
3387          if (handler.oneOff) {
3388            EventHandler.off(element, event.type, selector, fn);
3389          }
3390          return fn.apply(target, [event]);
3391        }
3392      }
3393    };
3394  }
3395  function findHandler(events, callable, delegationSelector = null) {
3396    return Object.values(events).find((event) => event.callable === callable && event.delegationSelector === delegationSelector);
3397  }
3398  function normalizeParameters(originalTypeEvent, handler, delegationFunction) {
3399    const isDelegated = typeof handler === "string";
3400    const callable = isDelegated ? delegationFunction : handler || delegationFunction;
3401    let typeEvent = getTypeEvent(originalTypeEvent);
3402    if (!nativeEvents.has(typeEvent)) {
3403      typeEvent = originalTypeEvent;
3404    }
3405    return [isDelegated, callable, typeEvent];
3406  }
3407  function addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {
3408    if (typeof originalTypeEvent !== "string" || !element) {
3409      return;
3410    }
3411    let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);
3412    if (originalTypeEvent in customEvents) {
3413      const wrapFunction = (fn2) => {
3414        return function(event) {
3415          if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {
3416            return fn2.call(this, event);
3417          }
3418        };
3419      };
3420      callable = wrapFunction(callable);
3421    }
3422    const events = getElementEvents(element);
3423    const handlers = events[typeEvent] || (events[typeEvent] = {});
3424    const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null);
3425    if (previousFunction) {
3426      previousFunction.oneOff = previousFunction.oneOff && oneOff;
3427      return;
3428    }
3429    const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ""));
3430    const fn = isDelegated ? bootstrapDelegationHandler(element, handler, callable) : bootstrapHandler(element, callable);
3431    fn.delegationSelector = isDelegated ? handler : null;
3432    fn.callable = callable;
3433    fn.oneOff = oneOff;
3434    fn.uidEvent = uid;
3435    handlers[uid] = fn;
3436    element.addEventListener(typeEvent, fn, isDelegated);
3437  }
3438  function removeHandler(element, events, typeEvent, handler, delegationSelector) {
3439    const fn = findHandler(events[typeEvent], handler, delegationSelector);
3440    if (!fn) {
3441      return;
3442    }
3443    element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));
3444    delete events[typeEvent][fn.uidEvent];
3445  }
3446  function removeNamespacedHandlers(element, events, typeEvent, namespace) {
3447    const storeElementEvent = events[typeEvent] || {};
3448    for (const [handlerKey, event] of Object.entries(storeElementEvent)) {
3449      if (handlerKey.includes(namespace)) {
3450        removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);
3451      }
3452    }
3453  }
3454  function getTypeEvent(event) {
3455    event = event.replace(stripNameRegex, "");
3456    return customEvents[event] || event;
3457  }
3458  var EventHandler = {
3459    on(element, event, handler, delegationFunction) {
3460      addHandler(element, event, handler, delegationFunction, false);
3461    },
3462    one(element, event, handler, delegationFunction) {
3463      addHandler(element, event, handler, delegationFunction, true);
3464    },
3465    off(element, originalTypeEvent, handler, delegationFunction) {
3466      if (typeof originalTypeEvent !== "string" || !element) {
3467        return;
3468      }
3469      const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);
3470      const inNamespace = typeEvent !== originalTypeEvent;
3471      const events = getElementEvents(element);
3472      const storeElementEvent = events[typeEvent] || {};
3473      const isNamespace = originalTypeEvent.startsWith(".");
3474      if (typeof callable !== "undefined") {
3475        if (!Object.keys(storeElementEvent).length) {
3476          return;
3477        }
3478        removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null);
3479        return;
3480      }
3481      if (isNamespace) {
3482        for (const elementEvent of Object.keys(events)) {
3483          removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));
3484        }
3485      }
3486      for (const [keyHandlers, event] of Object.entries(storeElementEvent)) {
3487        const handlerKey = keyHandlers.replace(stripUidRegex, "");
3488        if (!inNamespace || originalTypeEvent.includes(handlerKey)) {
3489          removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);
3490        }
3491      }
3492    },
3493    trigger(element, event, args) {
3494      if (typeof event !== "string" || !element) {
3495        return null;
3496      }
3497      const $ = getjQuery();
3498      const typeEvent = getTypeEvent(event);
3499      const inNamespace = event !== typeEvent;
3500      let jQueryEvent = null;
3501      let bubbles = true;
3502      let nativeDispatch = true;
3503      let defaultPrevented = false;
3504      if (inNamespace && $) {
3505        jQueryEvent = $.Event(event, args);
3506        $(element).trigger(jQueryEvent);
3507        bubbles = !jQueryEvent.isPropagationStopped();
3508        nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();
3509        defaultPrevented = jQueryEvent.isDefaultPrevented();
3510      }
3511      const evt = hydrateObj(new Event(event, { bubbles, cancelable: true }), args);
3512      if (defaultPrevented) {
3513        evt.preventDefault();
3514      }
3515      if (nativeDispatch) {
3516        element.dispatchEvent(evt);
3517      }
3518      if (evt.defaultPrevented && jQueryEvent) {
3519        jQueryEvent.preventDefault();
3520      }
3521      return evt;
3522    }
3523  };
3524  function hydrateObj(obj, meta = {}) {
3525    for (const [key, value] of Object.entries(meta)) {
3526      try {
3527        obj[key] = value;
3528      } catch (e) {
3529        Object.defineProperty(obj, key, {
3530          configurable: true,
3531          get() {
3532            return value;
3533          }
3534        });
3535      }
3536    }
3537    return obj;
3538  }
3539  var event_handler_default = EventHandler;
3540
3541  // ns-hugo-imp:/home/ubuntu/.cache/hugo_cache/modules/filecache/modules/pkg/mod/github.com/twbs/[email protected]+incompatible/js/src/dom/manipulator.js
3542  function normalizeData(value) {
3543    if (value === "true") {
3544      return true;
3545    }
3546    if (value === "false") {
3547      return false;
3548    }
3549    if (value === Number(value).toString()) {
3550      return Number(value);
3551    }
3552    if (value === "" || value === "null") {
3553      return null;
3554    }
3555    if (typeof value !== "string") {
3556      return value;
3557    }
3558    try {
3559      return JSON.parse(decodeURIComponent(value));
3560    } catch (e) {
3561      return value;
3562    }
3563  }
3564  function normalizeDataKey(key) {
3565    return key.replace(/[A-Z]/g, (chr) => `-${chr.toLowerCase()}`);
3566  }
3567  var Manipulator = {
3568    setDataAttribute(element, key, value) {
3569      element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);
3570    },
3571    removeDataAttribute(element, key) {
3572      element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);
3573    },
3574    getDataAttributes(element) {
3575      if (!element) {
3576        return {};
3577      }
3578      const attributes = {};
3579      const bsKeys = Object.keys(element.dataset).filter((key) => key.startsWith("bs") && !key.startsWith("bsConfig"));
3580      for (const key of bsKeys) {
3581        let pureKey = key.replace(/^bs/, "");
3582        pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);
3583        attributes[pureKey] = normalizeData(element.dataset[key]);
3584      }
3585      return attributes;
3586    },
3587    getDataAttribute(element, key) {
3588      return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));
3589    }
3590  };
3591  var manipulator_default = Manipulator;
3592
3593  // ns-hugo-imp:/home/ubuntu/.cache/hugo_cache/modules/filecache/modules/pkg/mod/github.com/twbs/[email protected]+incompatible/js/src/util/config.js
3594  var Config = class {
3595    // Getters
3596    static get Default() {
3597      return {};
3598    }
3599    static get DefaultType() {
3600      return {};
3601    }
3602    static get NAME() {
3603      throw new Error('You have to implement the static method "NAME", for each component!');
3604    }
3605    _getConfig(config) {
3606      config = this._mergeConfigObj(config);
3607      config = this._configAfterMerge(config);
3608      this._typeCheckConfig(config);
3609      return config;
3610    }
3611    _configAfterMerge(config) {
3612      return config;
3613    }
3614    _mergeConfigObj(config, element) {
3615      const jsonConfig = isElement(element) ? manipulator_default.getDataAttribute(element, "config") : {};
3616      return {
3617        ...this.constructor.Default,
3618        ...typeof jsonConfig === "object" ? jsonConfig : {},
3619        ...isElement(element) ? manipulator_default.getDataAttributes(element) : {},
3620        ...typeof config === "object" ? config : {}
3621      };
3622    }
3623    _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {
3624      for (const [property, expectedTypes] of Object.entries(configTypes)) {
3625        const value = config[property];
3626        const valueType = isElement(value) ? "element" : toType(value);
3627        if (!new RegExp(expectedTypes).test(valueType)) {
3628          throw new TypeError(
3629            `${this.constructor.NAME.toUpperCase()}: Option "${property}" provided type "${valueType}" but expected type "${expectedTypes}".`
3630          );
3631        }
3632      }
3633    }
3634  };
3635  var config_default = Config;
3636
3637  // ns-hugo-imp:/home/ubuntu/.cache/hugo_cache/modules/filecache/modules/pkg/mod/github.com/twbs/[email protected]+incompatible/js/src/base-component.js
3638  var VERSION = "5.3.2";
3639  var BaseComponent = class extends config_default {
3640    constructor(element, config) {
3641      super();
3642      element = getElement(element);
3643      if (!element) {
3644        return;
3645      }
3646      this._element = element;
3647      this._config = this._getConfig(config);
3648      data_default.set(this._element, this.constructor.DATA_KEY, this);
3649    }
3650    // Public
3651    dispose() {
3652      data_default.remove(this._element, this.constructor.DATA_KEY);
3653      event_handler_default.off(this._element, this.constructor.EVENT_KEY);
3654      for (const propertyName of Object.getOwnPropertyNames(this)) {
3655        this[propertyName] = null;
3656      }
3657    }
3658    _queueCallback(callback, element, isAnimated = true) {
3659      executeAfterTransition(callback, element, isAnimated);
3660    }
3661    _getConfig(config) {
3662      config = this._mergeConfigObj(config, this._element);
3663      config = this._configAfterMerge(config);
3664      this._typeCheckConfig(config);
3665      return config;
3666    }
3667    // Static
3668    static getInstance(element) {
3669      return data_default.get(getElement(element), this.DATA_KEY);
3670    }
3671    static getOrCreateInstance(element, config = {}) {
3672      return this.getInstance(element) || new this(element, typeof config === "object" ? config : null);
3673    }
3674    static get VERSION() {
3675      return VERSION;
3676    }
3677    static get DATA_KEY() {
3678      return `bs.${this.NAME}`;
3679    }
3680    static get EVENT_KEY() {
3681      return `.${this.DATA_KEY}`;
3682    }
3683    static eventName(name) {
3684      return `${name}${this.EVENT_KEY}`;
3685    }
3686  };
3687  var base_component_default = BaseComponent;
3688
3689  // ns-hugo-imp:/home/ubuntu/.cache/hugo_cache/modules/filecache/modules/pkg/mod/github.com/twbs/[email protected]+incompatible/js/src/dom/selector-engine.js
3690  var getSelector = (element) => {
3691    let selector = element.getAttribute("data-bs-target");
3692    if (!selector || selector === "#") {
3693      let hrefAttribute = element.getAttribute("href");
3694      if (!hrefAttribute || !hrefAttribute.includes("#") && !hrefAttribute.startsWith(".")) {
3695        return null;
3696      }
3697      if (hrefAttribute.includes("#") && !hrefAttribute.startsWith("#")) {
3698        hrefAttribute = `#${hrefAttribute.split("#")[1]}`;
3699      }
3700      selector = hrefAttribute && hrefAttribute !== "#" ? parseSelector(hrefAttribute.trim()) : null;
3701    }
3702    return selector;
3703  };
3704  var SelectorEngine = {
3705    find(selector, element = document.documentElement) {
3706      return [].concat(...Element.prototype.querySelectorAll.call(element, selector));
3707    },
3708    findOne(selector, element = document.documentElement) {
3709      return Element.prototype.querySelector.call(element, selector);
3710    },
3711    children(element, selector) {
3712      return [].concat(...element.children).filter((child) => child.matches(selector));
3713    },
3714    parents(element, selector) {
3715      const parents = [];
3716      let ancestor = element.parentNode.closest(selector);
3717      while (ancestor) {
3718        parents.push(ancestor);
3719        ancestor = ancestor.parentNode.closest(selector);
3720      }
3721      return parents;
3722    },
3723    prev(element, selector) {
3724      let previous = element.previousElementSibling;
3725      while (previous) {
3726        if (previous.matches(selector)) {
3727          return [previous];
3728        }
3729        previous = previous.previousElementSibling;
3730      }
3731      return [];
3732    },
3733    // TODO: this is now unused; remove later along with prev()
3734    next(element, selector) {
3735      let next = element.nextElementSibling;
3736      while (next) {
3737        if (next.matches(selector)) {
3738          return [next];
3739        }
3740        next = next.nextElementSibling;
3741      }
3742      return [];
3743    },
3744    focusableChildren(element) {
3745      const focusables = [
3746        "a",
3747        "button",
3748        "input",
3749        "textarea",
3750        "select",
3751        "details",
3752        "[tabindex]",
3753        '[contenteditable="true"]'
3754      ].map((selector) => `${selector}:not([tabindex^="-"])`).join(",");
3755      return this.find(focusables, element).filter((el) => !isDisabled(el) && isVisible(el));
3756    },
3757    getSelectorFromElement(element) {
3758      const selector = getSelector(element);
3759      if (selector) {
3760        return SelectorEngine.findOne(selector) ? selector : null;
3761      }
3762      return null;
3763    },
3764    getElementFromSelector(element) {
3765      const selector = getSelector(element);
3766      return selector ? SelectorEngine.findOne(selector) : null;
3767    },
3768    getMultipleElementsFromSelector(element) {
3769      const selector = getSelector(element);
3770      return selector ? SelectorEngine.find(selector) : [];
3771    }
3772  };
3773  var selector_engine_default = SelectorEngine;
3774
3775  // ns-hugo-imp:/home/ubuntu/.cache/hugo_cache/modules/filecache/modules/pkg/mod/github.com/twbs/[email protected]+incompatible/js/src/collapse.js
3776  var NAME = "collapse";
3777  var DATA_KEY = "bs.collapse";
3778  var EVENT_KEY = `.${DATA_KEY}`;
3779  var DATA_API_KEY = ".data-api";
3780  var EVENT_SHOW = `show${EVENT_KEY}`;
3781  var EVENT_SHOWN = `shown${EVENT_KEY}`;
3782  var EVENT_HIDE = `hide${EVENT_KEY}`;
3783  var EVENT_HIDDEN = `hidden${EVENT_KEY}`;
3784  var EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;
3785  var CLASS_NAME_SHOW = "show";
3786  var CLASS_NAME_COLLAPSE = "collapse";
3787  var CLASS_NAME_COLLAPSING = "collapsing";
3788  var CLASS_NAME_COLLAPSED = "collapsed";
3789  var CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`;
3790  var CLASS_NAME_HORIZONTAL = "collapse-horizontal";
3791  var WIDTH = "width";
3792  var HEIGHT = "height";
3793  var SELECTOR_ACTIVES = ".collapse.show, .collapse.collapsing";
3794  var SELECTOR_DATA_TOGGLE = '[data-bs-toggle="collapse"]';
3795  var Default = {
3796    parent: null,
3797    toggle: true
3798  };
3799  var DefaultType = {
3800    parent: "(null|element)",
3801    toggle: "boolean"
3802  };
3803  var Collapse = class _Collapse extends base_component_default {
3804    constructor(element, config) {
3805      super(element, config);
3806      this._isTransitioning = false;
vendor: 5,359 bytes, lines 3807-3948
3807      this._triggerArray = [];
3808      const toggleList = selector_engine_default.find(SELECTOR_DATA_TOGGLE);
3809      for (const elem of toggleList) {
3810        const selector = selector_engine_default.getSelectorFromElement(elem);
3811        const filterElement = selector_engine_default.find(selector).filter((foundElement) => foundElement === this._element);
3812        if (selector !== null && filterElement.length) {
3813          this._triggerArray.push(elem);
3814        }
3815      }
3816      this._initializeChildren();
3817      if (!this._config.parent) {
3818        this._addAriaAndCollapsedClass(this._triggerArray, this._isShown());
3819      }
3820      if (this._config.toggle) {
3821        this.toggle();
3822      }
3823    }
3824    // Getters
3825    static get Default() {
3826      return Default;
3827    }
3828    static get DefaultType() {
3829      return DefaultType;
3830    }
3831    static get NAME() {
3832      return NAME;
3833    }
3834    // Public
3835    toggle() {
3836      if (this._isShown()) {
3837        this.hide();
3838      } else {
3839        this.show();
3840      }
3841    }
3842    show() {
3843      if (this._isTransitioning || this._isShown()) {
3844        return;
3845      }
3846      let activeChildren = [];
3847      if (this._config.parent) {
3848        activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES).filter((element) => element !== this._element).map((element) => _Collapse.getOrCreateInstance(element, { toggle: false }));
3849      }
3850      if (activeChildren.length && activeChildren[0]._isTransitioning) {
3851        return;
3852      }
3853      const startEvent = event_handler_default.trigger(this._element, EVENT_SHOW);
3854      if (startEvent.defaultPrevented) {
3855        return;
3856      }
3857      for (const activeInstance of activeChildren) {
3858        activeInstance.hide();
3859      }
3860      const dimension = this._getDimension();
3861      this._element.classList.remove(CLASS_NAME_COLLAPSE);
3862      this._element.classList.add(CLASS_NAME_COLLAPSING);
3863      this._element.style[dimension] = 0;
3864      this._addAriaAndCollapsedClass(this._triggerArray, true);
3865      this._isTransitioning = true;
3866      const complete = () => {
3867        this._isTransitioning = false;
3868        this._element.classList.remove(CLASS_NAME_COLLAPSING);
3869        this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW);
3870        this._element.style[dimension] = "";
3871        event_handler_default.trigger(this._element, EVENT_SHOWN);
3872      };
3873      const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);
3874      const scrollSize = `scroll${capitalizedDimension}`;
3875      this._queueCallback(complete, this._element, true);
3876      this._element.style[dimension] = `${this._element[scrollSize]}px`;
3877    }
3878    hide() {
3879      if (this._isTransitioning || !this._isShown()) {
3880        return;
3881      }
3882      const startEvent = event_handler_default.trigger(this._element, EVENT_HIDE);
3883      if (startEvent.defaultPrevented) {
3884        return;
3885      }
3886      const dimension = this._getDimension();
3887      this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;
3888      reflow(this._element);
3889      this._element.classList.add(CLASS_NAME_COLLAPSING);
3890      this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW);
3891      for (const trigger of this._triggerArray) {
3892        const element = selector_engine_default.getElementFromSelector(trigger);
3893        if (element && !this._isShown(element)) {
3894          this._addAriaAndCollapsedClass([trigger], false);
3895        }
3896      }
3897      this._isTransitioning = true;
3898      const complete = () => {
3899        this._isTransitioning = false;
3900        this._element.classList.remove(CLASS_NAME_COLLAPSING);
3901        this._element.classList.add(CLASS_NAME_COLLAPSE);
3902        event_handler_default.trigger(this._element, EVENT_HIDDEN);
3903      };
3904      this._element.style[dimension] = "";
3905      this._queueCallback(complete, this._element, true);
3906    }
3907    _isShown(element = this._element) {
3908      return element.classList.contains(CLASS_NAME_SHOW);
3909    }
3910    // Private
3911    _configAfterMerge(config) {
3912      config.toggle = Boolean(config.toggle);
3913      config.parent = getElement(config.parent);
3914      return config;
3915    }
3916    _getDimension() {
3917      return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT;
3918    }
3919    _initializeChildren() {
3920      if (!this._config.parent) {
3921        return;
3922      }
3923      const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE);
3924      for (const element of children) {
3925        const selected = selector_engine_default.getElementFromSelector(element);
3926        if (selected) {
3927          this._addAriaAndCollapsedClass([element], this._isShown(selected));
3928        }
3929      }
3930    }
3931    _getFirstLevelChildren(selector) {
3932      const children = selector_engine_default.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent);
3933      return selector_engine_default.find(selector, this._config.parent).filter((element) => !children.includes(element));
3934    }
3935    _addAriaAndCollapsedClass(triggerArray, isOpen) {
3936      if (!triggerArray.length) {
3937        return;
3938      }
3939      for (const element of triggerArray) {
3940        element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen);
3941        element.setAttribute("aria-expanded", isOpen);
3942      }
3943    }
3944    // Static
3945    static jQueryInterface(config) {
3946      const _config = {};
3947      if (typeof config === "string" && /show|hide/.test(config)) {
3948        _config.toggle = false;
3949      }
3950      return this.each(function() {
3951        const data = _Collapse.getOrCreateInstance(this, _config);
3952        if (typeof config === "string") {
3953          if (typeof data[config] === "undefined") {
3954            throw new TypeError(`No method named "${config}"`);
3955          }
3956          data[config]();
3957        }
3958      });
3959    }
3960  };
3961  event_handler_default.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function(event) {
3962    if (event.target.tagName === "A" || event.delegateTarget && event.delegateTarget.tagName === "A") {
3963      event.preventDefault();
3964    }
3965    for (const element of selector_engine_default.getMultipleElementsFromSelector(this)) {
3966      Collapse.getOrCreateInstance(element, { toggle: false }).toggle();
3967    }
3968  });
3969  defineJQueryPlugin(Collapse);
3970
3971  // ns-hugo-imp:/home/ubuntu/.cache/hugo_cache/modules/filecache/modules/pkg/mod/github.com/twbs/[email protected]+incompatible/js/src/dropdown.js
3972  var Popper = __toESM(require_popper());
3973  var NAME2 = "dropdown";
3974  var DATA_KEY2 = "bs.dropdown";
3975  var EVENT_KEY2 = `.${DATA_KEY2}`;
3976  var DATA_API_KEY2 = ".data-api";
3977  var ESCAPE_KEY = "Escape";
3978  var TAB_KEY = "Tab";
3979  var ARROW_UP_KEY = "ArrowUp";
3980  var ARROW_DOWN_KEY = "ArrowDown";
3981  var RIGHT_MOUSE_BUTTON = 2;
3982  var EVENT_HIDE2 = `hide${EVENT_KEY2}`;
3983  var EVENT_HIDDEN2 = `hidden${EVENT_KEY2}`;
3984  var EVENT_SHOW2 = `show${EVENT_KEY2}`;
3985  var EVENT_SHOWN2 = `shown${EVENT_KEY2}`;
3986  var EVENT_CLICK_DATA_API2 = `click${EVENT_KEY2}${DATA_API_KEY2}`;
3987  var EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY2}${DATA_API_KEY2}`;
3988  var EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY2}${DATA_API_KEY2}`;
3989  var CLASS_NAME_SHOW2 = "show";
3990  var CLASS_NAME_DROPUP = "dropup";
3991  var CLASS_NAME_DROPEND = "dropend";
3992  var CLASS_NAME_DROPSTART = "dropstart";
3993  var CLASS_NAME_DROPUP_CENTER = "dropup-center";
3994  var CLASS_NAME_DROPDOWN_CENTER = "dropdown-center";
3995  var SELECTOR_DATA_TOGGLE2 = '[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)';
3996  var SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE2}.${CLASS_NAME_SHOW2}`;
3997  var SELECTOR_MENU = ".dropdown-menu";
3998  var SELECTOR_NAVBAR = ".navbar";
3999  var SELECTOR_NAVBAR_NAV = ".navbar-nav";
4000  var SELECTOR_VISIBLE_ITEMS = ".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)";
4001  var PLACEMENT_TOP = isRTL() ? "top-end" : "top-start";
4002  var PLACEMENT_TOPEND = isRTL() ? "top-start" : "top-end";
4003  var PLACEMENT_BOTTOM = isRTL() ? "bottom-end" : "bottom-start";
4004  var PLACEMENT_BOTTOMEND = isRTL() ? "bottom-start" : "bottom-end";
4005  var PLACEMENT_RIGHT = isRTL() ? "left-start" : "right-start";
4006  var PLACEMENT_LEFT = isRTL() ? "right-start" : "left-start";
4007  var PLACEMENT_TOPCENTER = "top";
4008  var PLACEMENT_BOTTOMCENTER = "bottom";
4009  var Default2 = {
4010    autoClose: true,
4011    boundary: "clippingParents",
4012    display: "dynamic",
4013    offset: [0, 2],
4014    popperConfig: null,
4015    reference: "toggle"
4016  };
4017  var DefaultType2 = {
4018    autoClose: "(boolean|string)",
4019    boundary: "(string|element)",
4020    display: "string",
4021    offset: "(array|string|function)",
4022    popperConfig: "(null|object|function)",
4023    reference: "(string|element|object)"
4024  };
4025  var Dropdown = class _Dropdown extends base_component_default {
4026    constructor(element, config) {
4027      super(element, config);
4028      this._popper = null;
4029      this._parent = this._element.parentNode;
4030      this._menu = selector_engine_default.next(this._element, SELECTOR_MENU)[0] || selector_engine_default.prev(this._element, SELECTOR_MENU)[0] || selector_engine_default.findOne(SELECTOR_MENU, this._parent);
4031      this._inNavbar = this._detectNavbar();
4032    }
4033    // Getters
4034    static get Default() {
4035      return Default2;
4036    }
4037    static get DefaultType() {
4038      return DefaultType2;
4039    }
4040    static get NAME() {
4041      return NAME2;
4042    }
4043    // Public
4044    toggle() {
4045      return this._isShown() ? this.hide() : this.show();
4046    }
4047    show() {
4048      if (isDisabled(this._element) || this._isShown()) {
4049        return;
4050      }
4051      const relatedTarget = {
4052        relatedTarget: this._element
4053      };
4054      const showEvent = event_handler_default.trigger(this._element, EVENT_SHOW2, relatedTarget);
4055      if (showEvent.defaultPrevented) {
4056        return;
4057      }
4058      this._createPopper();
4059      if ("ontouchstart" in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {
4060        for (const element of [].concat(...document.body.children)) {
vendor: 4,227 bytes, lines 4061-4175
4061          event_handler_default.on(element, "mouseover", noop);
4062        }
4063      }
4064      this._element.focus();
4065      this._element.setAttribute("aria-expanded", true);
4066      this._menu.classList.add(CLASS_NAME_SHOW2);
4067      this._element.classList.add(CLASS_NAME_SHOW2);
4068      event_handler_default.trigger(this._element, EVENT_SHOWN2, relatedTarget);
4069    }
4070    hide() {
4071      if (isDisabled(this._element) || !this._isShown()) {
4072        return;
4073      }
4074      const relatedTarget = {
4075        relatedTarget: this._element
4076      };
4077      this._completeHide(relatedTarget);
4078    }
4079    dispose() {
4080      if (this._popper) {
4081        this._popper.destroy();
4082      }
4083      super.dispose();
4084    }
4085    update() {
4086      this._inNavbar = this._detectNavbar();
4087      if (this._popper) {
4088        this._popper.update();
4089      }
4090    }
4091    // Private
4092    _completeHide(relatedTarget) {
4093      const hideEvent = event_handler_default.trigger(this._element, EVENT_HIDE2, relatedTarget);
4094      if (hideEvent.defaultPrevented) {
4095        return;
4096      }
4097      if ("ontouchstart" in document.documentElement) {
4098        for (const element of [].concat(...document.body.children)) {
4099          event_handler_default.off(element, "mouseover", noop);
4100        }
4101      }
4102      if (this._popper) {
4103        this._popper.destroy();
4104      }
4105      this._menu.classList.remove(CLASS_NAME_SHOW2);
4106      this._element.classList.remove(CLASS_NAME_SHOW2);
4107      this._element.setAttribute("aria-expanded", "false");
4108      manipulator_default.removeDataAttribute(this._menu, "popper");
4109      event_handler_default.trigger(this._element, EVENT_HIDDEN2, relatedTarget);
4110    }
4111    _getConfig(config) {
4112      config = super._getConfig(config);
4113      if (typeof config.reference === "object" && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== "function") {
4114        throw new TypeError(`${NAME2.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);
4115      }
4116      return config;
4117    }
4118    _createPopper() {
4119      if (typeof Popper === "undefined") {
4120        throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org)");
4121      }
4122      let referenceElement = this._element;
4123      if (this._config.reference === "parent") {
4124        referenceElement = this._parent;
4125      } else if (isElement(this._config.reference)) {
4126        referenceElement = getElement(this._config.reference);
4127      } else if (typeof this._config.reference === "object") {
4128        referenceElement = this._config.reference;
4129      }
4130      const popperConfig = this._getPopperConfig();
4131      this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig);
4132    }
4133    _isShown() {
4134      return this._menu.classList.contains(CLASS_NAME_SHOW2);
4135    }
4136    _getPlacement() {
4137      const parentDropdown = this._parent;
4138      if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {
4139        return PLACEMENT_RIGHT;
4140      }
4141      if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {
4142        return PLACEMENT_LEFT;
4143      }
4144      if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {
4145        return PLACEMENT_TOPCENTER;
4146      }
4147      if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {
4148        return PLACEMENT_BOTTOMCENTER;
4149      }
4150      const isEnd = getComputedStyle(this._menu).getPropertyValue("--bs-position").trim() === "end";
4151      if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {
4152        return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;
4153      }
4154      return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;
4155    }
4156    _detectNavbar() {
4157      return this._element.closest(SELECTOR_NAVBAR) !== null;
4158    }
4159    _getOffset() {
4160      const { offset } = this._config;
4161      if (typeof offset === "string") {
4162        return offset.split(",").map((value) => Number.parseInt(value, 10));
4163      }
4164      if (typeof offset === "function") {
4165        return (popperData) => offset(popperData, this._element);
4166      }
4167      return offset;
4168    }
4169    _getPopperConfig() {
4170      const defaultBsPopperConfig = {
4171        placement: this._getPlacement(),
4172        modifiers: [
4173          {
4174            name: "preventOverflow",
4175            options: {
vendor: 2,541 bytes, lines 4176-4244
4176              boundary: this._config.boundary
4177            }
4178          },
4179          {
4180            name: "offset",
4181            options: {
4182              offset: this._getOffset()
4183            }
4184          }
4185        ]
4186      };
4187      if (this._inNavbar || this._config.display === "static") {
4188        manipulator_default.setDataAttribute(this._menu, "popper", "static");
4189        defaultBsPopperConfig.modifiers = [{
4190          name: "applyStyles",
4191          enabled: false
4192        }];
4193      }
4194      return {
4195        ...defaultBsPopperConfig,
4196        ...execute(this._config.popperConfig, [defaultBsPopperConfig])
4197      };
4198    }
4199    _selectMenuItem({ key, target }) {
4200      const items = selector_engine_default.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter((element) => isVisible(element));
4201      if (!items.length) {
4202        return;
4203      }
4204      getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();
4205    }
4206    // Static
4207    static jQueryInterface(config) {
4208      return this.each(function() {
4209        const data = _Dropdown.getOrCreateInstance(this, config);
4210        if (typeof config !== "string") {
4211          return;
4212        }
4213        if (typeof data[config] === "undefined") {
4214          throw new TypeError(`No method named "${config}"`);
4215        }
4216        data[config]();
4217      });
4218    }
4219    static clearMenus(event) {
4220      if (event.button === RIGHT_MOUSE_BUTTON || event.type === "keyup" && event.key !== TAB_KEY) {
4221        return;
4222      }
4223      const openToggles = selector_engine_default.find(SELECTOR_DATA_TOGGLE_SHOWN);
4224      for (const toggle of openToggles) {
4225        const context = _Dropdown.getInstance(toggle);
4226        if (!context || context._config.autoClose === false) {
4227          continue;
4228        }
4229        const composedPath = event.composedPath();
4230        const isMenuTarget = composedPath.includes(context._menu);
4231        if (composedPath.includes(context._element) || context._config.autoClose === "inside" && !isMenuTarget || context._config.autoClose === "outside" && isMenuTarget) {
4232          continue;
4233        }
4234        if (context._menu.contains(event.target) && (event.type === "keyup" && event.key === TAB_KEY || /input|select|option|textarea|form/i.test(event.target.tagName))) {
4235          continue;
4236        }
4237        const relatedTarget = { relatedTarget: context._element };
4238        if (event.type === "click") {
4239          relatedTarget.clickEvent = event;
4240        }
4241        context._completeHide(relatedTarget);
4242      }
4243    }
4244    static dataApiKeydownHandler(event) {
vendor: 6,173 bytes, lines 4245-4425
4245      const isInput = /input|textarea/i.test(event.target.tagName);
4246      const isEscapeEvent = event.key === ESCAPE_KEY;
4247      const isUpOrDownEvent = [ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key);
4248      if (!isUpOrDownEvent && !isEscapeEvent) {
4249        return;
4250      }
4251      if (isInput && !isEscapeEvent) {
4252        return;
4253      }
4254      event.preventDefault();
4255      const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE2) ? this : selector_engine_default.prev(this, SELECTOR_DATA_TOGGLE2)[0] || selector_engine_default.next(this, SELECTOR_DATA_TOGGLE2)[0] || selector_engine_default.findOne(SELECTOR_DATA_TOGGLE2, event.delegateTarget.parentNode);
4256      const instance = _Dropdown.getOrCreateInstance(getToggleButton);
4257      if (isUpOrDownEvent) {
4258        event.stopPropagation();
4259        instance.show();
4260        instance._selectMenuItem(event);
4261        return;
4262      }
4263      if (instance._isShown()) {
4264        event.stopPropagation();
4265        instance.hide();
4266        getToggleButton.focus();
4267      }
4268    }
4269  };
4270  event_handler_default.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE2, Dropdown.dataApiKeydownHandler);
4271  event_handler_default.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);
4272  event_handler_default.on(document, EVENT_CLICK_DATA_API2, Dropdown.clearMenus);
4273  event_handler_default.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);
4274  event_handler_default.on(document, EVENT_CLICK_DATA_API2, SELECTOR_DATA_TOGGLE2, function(event) {
4275    event.preventDefault();
4276    Dropdown.getOrCreateInstance(this).toggle();
4277  });
4278  defineJQueryPlugin(Dropdown);
4279
4280  // ns-hugo-imp:/home/ubuntu/.cache/hugo_cache/modules/filecache/modules/pkg/mod/github.com/twbs/[email protected]+incompatible/js/src/util/backdrop.js
4281  var NAME3 = "backdrop";
4282  var CLASS_NAME_FADE = "fade";
4283  var CLASS_NAME_SHOW3 = "show";
4284  var EVENT_MOUSEDOWN = `mousedown.bs.${NAME3}`;
4285  var Default3 = {
4286    className: "modal-backdrop",
4287    clickCallback: null,
4288    isAnimated: false,
4289    isVisible: true,
4290    // if false, we use the backdrop helper without adding any element to the dom
4291    rootElement: "body"
4292    // give the choice to place backdrop under different elements
4293  };
4294  var DefaultType3 = {
4295    className: "string",
4296    clickCallback: "(function|null)",
4297    isAnimated: "boolean",
4298    isVisible: "boolean",
4299    rootElement: "(element|string)"
4300  };
4301  var Backdrop = class extends config_default {
4302    constructor(config) {
4303      super();
4304      this._config = this._getConfig(config);
4305      this._isAppended = false;
4306      this._element = null;
4307    }
4308    // Getters
4309    static get Default() {
4310      return Default3;
4311    }
4312    static get DefaultType() {
4313      return DefaultType3;
4314    }
4315    static get NAME() {
4316      return NAME3;
4317    }
4318    // Public
4319    show(callback) {
4320      if (!this._config.isVisible) {
4321        execute(callback);
4322        return;
4323      }
4324      this._append();
4325      const element = this._getElement();
4326      if (this._config.isAnimated) {
4327        reflow(element);
4328      }
4329      element.classList.add(CLASS_NAME_SHOW3);
4330      this._emulateAnimation(() => {
4331        execute(callback);
4332      });
4333    }
4334    hide(callback) {
4335      if (!this._config.isVisible) {
4336        execute(callback);
4337        return;
4338      }
4339      this._getElement().classList.remove(CLASS_NAME_SHOW3);
4340      this._emulateAnimation(() => {
4341        this.dispose();
4342        execute(callback);
4343      });
4344    }
4345    dispose() {
4346      if (!this._isAppended) {
4347        return;
4348      }
4349      event_handler_default.off(this._element, EVENT_MOUSEDOWN);
4350      this._element.remove();
4351      this._isAppended = false;
4352    }
4353    // Private
4354    _getElement() {
4355      if (!this._element) {
4356        const backdrop = document.createElement("div");
4357        backdrop.className = this._config.className;
4358        if (this._config.isAnimated) {
4359          backdrop.classList.add(CLASS_NAME_FADE);
4360        }
4361        this._element = backdrop;
4362      }
4363      return this._element;
4364    }
4365    _configAfterMerge(config) {
4366      config.rootElement = getElement(config.rootElement);
4367      return config;
4368    }
4369    _append() {
4370      if (this._isAppended) {
4371        return;
4372      }
4373      const element = this._getElement();
4374      this._config.rootElement.append(element);
4375      event_handler_default.on(element, EVENT_MOUSEDOWN, () => {
4376        execute(this._config.clickCallback);
4377      });
4378      this._isAppended = true;
4379    }
4380    _emulateAnimation(callback) {
4381      executeAfterTransition(callback, this._getElement(), this._config.isAnimated);
4382    }
4383  };
4384  var backdrop_default = Backdrop;
4385
4386  // ns-hugo-imp:/home/ubuntu/.cache/hugo_cache/modules/filecache/modules/pkg/mod/github.com/twbs/[email protected]+incompatible/js/src/util/component-functions.js
4387  var enableDismissTrigger = (component, method = "hide") => {
4388    const clickEvent = `click.dismiss${component.EVENT_KEY}`;
4389    const name = component.NAME;
4390    event_handler_default.on(document, clickEvent, `[data-bs-dismiss="${name}"]`, function(event) {
4391      if (["A", "AREA"].includes(this.tagName)) {
4392        event.preventDefault();
4393      }
4394      if (isDisabled(this)) {
4395        return;
4396      }
4397      const target = selector_engine_default.getElementFromSelector(this) || this.closest(`.${name}`);
4398      const instance = component.getOrCreateInstance(target);
4399      instance[method]();
4400    });
4401  };
4402
4403  // ns-hugo-imp:/home/ubuntu/.cache/hugo_cache/modules/filecache/modules/pkg/mod/github.com/twbs/[email protected]+incompatible/js/src/util/focustrap.js
4404  var NAME4 = "focustrap";
4405  var DATA_KEY3 = "bs.focustrap";
4406  var EVENT_KEY3 = `.${DATA_KEY3}`;
4407  var EVENT_FOCUSIN = `focusin${EVENT_KEY3}`;
4408  var EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY3}`;
4409  var TAB_KEY2 = "Tab";
4410  var TAB_NAV_FORWARD = "forward";
4411  var TAB_NAV_BACKWARD = "backward";
4412  var Default4 = {
4413    autofocus: true,
4414    trapElement: null
4415    // The element to trap focus inside of
4416  };
4417  var DefaultType4 = {
4418    autofocus: "boolean",
4419    trapElement: "element"
4420  };
4421  var FocusTrap = class extends config_default {
4422    constructor(config) {
4423      super();
4424      this._config = this._getConfig(config);
4425      this._isActive = false;
4426      this._lastTabNavDirection = null;
4427    }
4428    // Getters
4429    static get Default() {
4430      return Default4;
4431    }
4432    static get DefaultType() {
4433      return DefaultType4;
4434    }
4435    static get NAME() {
4436      return NAME4;
4437    }
4438    // Public
4439    activate() {
4440      if (this._isActive) {
4441        return;
4442      }
4443      if (this._config.autofocus) {
4444        this._config.trapElement.focus();
4445      }
4446      event_handler_default.off(document, EVENT_KEY3);
4447      event_handler_default.on(document, EVENT_FOCUSIN, (event) => this._handleFocusin(event));
4448      event_handler_default.on(document, EVENT_KEYDOWN_TAB, (event) => this._handleKeydown(event));
4449      this._isActive = true;
4450    }
4451    deactivate() {
4452      if (!this._isActive) {
4453        return;
4454      }
4455      this._isActive = false;
4456      event_handler_default.off(document, EVENT_KEY3);
4457    }
4458    // Private
4459    _handleFocusin(event) {
4460      const { trapElement } = this._config;
4461      if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) {
4462        return;
4463      }
4464      const elements = selector_engine_default.focusableChildren(trapElement);
4465      if (elements.length === 0) {
4466        trapElement.focus();
4467      } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {
4468        elements[elements.length - 1].focus();
4469      } else {
4470        elements[0].focus();
4471      }
4472    }
4473    _handleKeydown(event) {
4474      if (event.key !== TAB_KEY2) {
4475        return;
4476      }
4477      this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD;
4478    }
4479  };
4480  var focustrap_default = FocusTrap;
4481
4482  // ns-hugo-imp:/home/ubuntu/.cache/hugo_cache/modules/filecache/modules/pkg/mod/github.com/twbs/[email protected]+incompatible/js/src/util/scrollbar.js
4483  var SELECTOR_FIXED_CONTENT = ".fixed-top, .fixed-bottom, .is-fixed, .sticky-top";
4484  var SELECTOR_STICKY_CONTENT = ".sticky-top";
4485  var PROPERTY_PADDING = "padding-right";
4486  var PROPERTY_MARGIN = "margin-right";
4487  var ScrollBarHelper = class {
4488    constructor() {
4489      this._element = document.body;
4490    }
4491    // Public
4492    getWidth() {
4493      const documentWidth = document.documentElement.clientWidth;
4494      return Math.abs(window.innerWidth - documentWidth);
4495    }
4496    hide() {
4497      const width = this.getWidth();
4498      this._disableOverFlow();
4499      this._setElementAttributes(this._element, PROPERTY_PADDING, (calculatedValue) => calculatedValue + width);
4500      this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, (calculatedValue) => calculatedValue + width);
4501      this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, (calculatedValue) => calculatedValue - width);
4502    }
4503    reset() {
4504      this._resetElementAttributes(this._element, "overflow");
4505      this._resetElementAttributes(this._element, PROPERTY_PADDING);
4506      this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING);
4507      this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN);
4508    }
4509    isOverflowing() {
4510      return this.getWidth() > 0;
4511    }
4512    // Private
4513    _disableOverFlow() {
4514      this._saveInitialAttribute(this._element, "overflow");
4515      this._element.style.overflow = "hidden";
4516    }
4517    _setElementAttributes(selector, styleProperty, callback) {
4518      const scrollbarWidth = this.getWidth();
4519      const manipulationCallBack = (element) => {
4520        if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {
4521          return;
4522        }
4523        this._saveInitialAttribute(element, styleProperty);
4524        const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty);
4525        element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`);
4526      };
4527      this._applyManipulationCallback(selector, manipulationCallBack);
4528    }
4529    _saveInitialAttribute(element, styleProperty) {
4530      const actualValue = element.style.getPropertyValue(styleProperty);
4531      if (actualValue) {
4532        manipulator_default.setDataAttribute(element, styleProperty, actualValue);
4533      }
4534    }
4535    _resetElementAttributes(selector, styleProperty) {
4536      const manipulationCallBack = (element) => {
4537        const value = manipulator_default.getDataAttribute(element, styleProperty);
4538        if (value === null) {
4539          element.style.removeProperty(styleProperty);
4540          return;
4541        }
4542        manipulator_default.removeDataAttribute(element, styleProperty);
4543        element.style.setProperty(styleProperty, value);
4544      };
4545      this._applyManipulationCallback(selector, manipulationCallBack);
4546    }
4547    _applyManipulationCallback(selector, callBack) {
4548      if (isElement(selector)) {
4549        callBack(selector);
4550        return;
4551      }
4552      for (const sel of selector_engine_default.find(selector, this._element)) {
4553        callBack(sel);
4554      }
4555    }
4556  };
4557  var scrollbar_default = ScrollBarHelper;
4558
4559  // ns-hugo-imp:/home/ubuntu/.cache/hugo_cache/modules/filecache/modules/pkg/mod/github.com/twbs/[email protected]+incompatible/js/src/modal.js
4560  var NAME5 = "modal";
4561  var DATA_KEY4 = "bs.modal";
4562  var EVENT_KEY4 = `.${DATA_KEY4}`;
4563  var DATA_API_KEY3 = ".data-api";
4564  var ESCAPE_KEY2 = "Escape";
4565  var EVENT_HIDE3 = `hide${EVENT_KEY4}`;
4566  var EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY4}`;
4567  var EVENT_HIDDEN3 = `hidden${EVENT_KEY4}`;
4568  var EVENT_SHOW3 = `show${EVENT_KEY4}`;
4569  var EVENT_SHOWN3 = `shown${EVENT_KEY4}`;
4570  var EVENT_RESIZE = `resize${EVENT_KEY4}`;
4571  var EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY4}`;
4572  var EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY4}`;
4573  var EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY4}`;
4574  var EVENT_CLICK_DATA_API3 = `click${EVENT_KEY4}${DATA_API_KEY3}`;
vendor: 14,925 bytes, lines 4575-4979
4575  var CLASS_NAME_OPEN = "modal-open";
4576  var CLASS_NAME_FADE2 = "fade";
4577  var CLASS_NAME_SHOW4 = "show";
4578  var CLASS_NAME_STATIC = "modal-static";
4579  var OPEN_SELECTOR = ".modal.show";
4580  var SELECTOR_DIALOG = ".modal-dialog";
4581  var SELECTOR_MODAL_BODY = ".modal-body";
4582  var SELECTOR_DATA_TOGGLE3 = '[data-bs-toggle="modal"]';
4583  var Default5 = {
4584    backdrop: true,
4585    focus: true,
4586    keyboard: true
4587  };
4588  var DefaultType5 = {
4589    backdrop: "(boolean|string)",
4590    focus: "boolean",
4591    keyboard: "boolean"
4592  };
4593  var Modal = class _Modal extends base_component_default {
4594    constructor(element, config) {
4595      super(element, config);
4596      this._dialog = selector_engine_default.findOne(SELECTOR_DIALOG, this._element);
4597      this._backdrop = this._initializeBackDrop();
4598      this._focustrap = this._initializeFocusTrap();
4599      this._isShown = false;
4600      this._isTransitioning = false;
4601      this._scrollBar = new scrollbar_default();
4602      this._addEventListeners();
4603    }
4604    // Getters
4605    static get Default() {
4606      return Default5;
4607    }
4608    static get DefaultType() {
4609      return DefaultType5;
4610    }
4611    static get NAME() {
4612      return NAME5;
4613    }
4614    // Public
4615    toggle(relatedTarget) {
4616      return this._isShown ? this.hide() : this.show(relatedTarget);
4617    }
4618    show(relatedTarget) {
4619      if (this._isShown || this._isTransitioning) {
4620        return;
4621      }
4622      const showEvent = event_handler_default.trigger(this._element, EVENT_SHOW3, {
4623        relatedTarget
4624      });
4625      if (showEvent.defaultPrevented) {
4626        return;
4627      }
4628      this._isShown = true;
4629      this._isTransitioning = true;
4630      this._scrollBar.hide();
4631      document.body.classList.add(CLASS_NAME_OPEN);
4632      this._adjustDialog();
4633      this._backdrop.show(() => this._showElement(relatedTarget));
4634    }
4635    hide() {
4636      if (!this._isShown || this._isTransitioning) {
4637        return;
4638      }
4639      const hideEvent = event_handler_default.trigger(this._element, EVENT_HIDE3);
4640      if (hideEvent.defaultPrevented) {
4641        return;
4642      }
4643      this._isShown = false;
4644      this._isTransitioning = true;
4645      this._focustrap.deactivate();
4646      this._element.classList.remove(CLASS_NAME_SHOW4);
4647      this._queueCallback(() => this._hideModal(), this._element, this._isAnimated());
4648    }
4649    dispose() {
4650      event_handler_default.off(window, EVENT_KEY4);
4651      event_handler_default.off(this._dialog, EVENT_KEY4);
4652      this._backdrop.dispose();
4653      this._focustrap.deactivate();
4654      super.dispose();
4655    }
4656    handleUpdate() {
4657      this._adjustDialog();
4658    }
4659    // Private
4660    _initializeBackDrop() {
4661      return new backdrop_default({
4662        isVisible: Boolean(this._config.backdrop),
4663        // 'static' option will be translated to true, and booleans will keep their value,
4664        isAnimated: this._isAnimated()
4665      });
4666    }
4667    _initializeFocusTrap() {
4668      return new focustrap_default({
4669        trapElement: this._element
4670      });
4671    }
4672    _showElement(relatedTarget) {
4673      if (!document.body.contains(this._element)) {
4674        document.body.append(this._element);
4675      }
4676      this._element.style.display = "block";
4677      this._element.removeAttribute("aria-hidden");
4678      this._element.setAttribute("aria-modal", true);
4679      this._element.setAttribute("role", "dialog");
4680      this._element.scrollTop = 0;
4681      const modalBody = selector_engine_default.findOne(SELECTOR_MODAL_BODY, this._dialog);
4682      if (modalBody) {
4683        modalBody.scrollTop = 0;
4684      }
4685      reflow(this._element);
4686      this._element.classList.add(CLASS_NAME_SHOW4);
4687      const transitionComplete = () => {
4688        if (this._config.focus) {
4689          this._focustrap.activate();
4690        }
4691        this._isTransitioning = false;
4692        event_handler_default.trigger(this._element, EVENT_SHOWN3, {
4693          relatedTarget
4694        });
4695      };
4696      this._queueCallback(transitionComplete, this._dialog, this._isAnimated());
4697    }
4698    _addEventListeners() {
4699      event_handler_default.on(this._element, EVENT_KEYDOWN_DISMISS, (event) => {
4700        if (event.key !== ESCAPE_KEY2) {
4701          return;
4702        }
4703        if (this._config.keyboard) {
4704          this.hide();
4705          return;
4706        }
4707        this._triggerBackdropTransition();
4708      });
4709      event_handler_default.on(window, EVENT_RESIZE, () => {
4710        if (this._isShown && !this._isTransitioning) {
4711          this._adjustDialog();
4712        }
4713      });
4714      event_handler_default.on(this._element, EVENT_MOUSEDOWN_DISMISS, (event) => {
4715        event_handler_default.one(this._element, EVENT_CLICK_DISMISS, (event2) => {
4716          if (this._element !== event.target || this._element !== event2.target) {
4717            return;
4718          }
4719          if (this._config.backdrop === "static") {
4720            this._triggerBackdropTransition();
4721            return;
4722          }
4723          if (this._config.backdrop) {
4724            this.hide();
4725          }
4726        });
4727      });
4728    }
4729    _hideModal() {
4730      this._element.style.display = "none";
4731      this._element.setAttribute("aria-hidden", true);
4732      this._element.removeAttribute("aria-modal");
4733      this._element.removeAttribute("role");
4734      this._isTransitioning = false;
4735      this._backdrop.hide(() => {
4736        document.body.classList.remove(CLASS_NAME_OPEN);
4737        this._resetAdjustments();
4738        this._scrollBar.reset();
4739        event_handler_default.trigger(this._element, EVENT_HIDDEN3);
4740      });
4741    }
4742    _isAnimated() {
4743      return this._element.classList.contains(CLASS_NAME_FADE2);
4744    }
4745    _triggerBackdropTransition() {
4746      const hideEvent = event_handler_default.trigger(this._element, EVENT_HIDE_PREVENTED);
4747      if (hideEvent.defaultPrevented) {
4748        return;
4749      }
4750      const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
4751      const initialOverflowY = this._element.style.overflowY;
4752      if (initialOverflowY === "hidden" || this._element.classList.contains(CLASS_NAME_STATIC)) {
4753        return;
4754      }
4755      if (!isModalOverflowing) {
4756        this._element.style.overflowY = "hidden";
4757      }
4758      this._element.classList.add(CLASS_NAME_STATIC);
4759      this._queueCallback(() => {
4760        this._element.classList.remove(CLASS_NAME_STATIC);
4761        this._queueCallback(() => {
4762          this._element.style.overflowY = initialOverflowY;
4763        }, this._dialog);
4764      }, this._dialog);
4765      this._element.focus();
4766    }
4767    /**
4768     * The following methods are used to handle overflowing modals
4769     */
4770    _adjustDialog() {
4771      const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
4772      const scrollbarWidth = this._scrollBar.getWidth();
4773      const isBodyOverflowing = scrollbarWidth > 0;
4774      if (isBodyOverflowing && !isModalOverflowing) {
4775        const property = isRTL() ? "paddingLeft" : "paddingRight";
4776        this._element.style[property] = `${scrollbarWidth}px`;
4777      }
4778      if (!isBodyOverflowing && isModalOverflowing) {
4779        const property = isRTL() ? "paddingRight" : "paddingLeft";
4780        this._element.style[property] = `${scrollbarWidth}px`;
4781      }
4782    }
4783    _resetAdjustments() {
4784      this._element.style.paddingLeft = "";
4785      this._element.style.paddingRight = "";
4786    }
4787    // Static
4788    static jQueryInterface(config, relatedTarget) {
4789      return this.each(function() {
4790        const data = _Modal.getOrCreateInstance(this, config);
4791        if (typeof config !== "string") {
4792          return;
4793        }
4794        if (typeof data[config] === "undefined") {
4795          throw new TypeError(`No method named "${config}"`);
4796        }
4797        data[config](relatedTarget);
4798      });
4799    }
4800  };
4801  event_handler_default.on(document, EVENT_CLICK_DATA_API3, SELECTOR_DATA_TOGGLE3, function(event) {
4802    const target = selector_engine_default.getElementFromSelector(this);
4803    if (["A", "AREA"].includes(this.tagName)) {
4804      event.preventDefault();
4805    }
4806    event_handler_default.one(target, EVENT_SHOW3, (showEvent) => {
4807      if (showEvent.defaultPrevented) {
4808        return;
4809      }
4810      event_handler_default.one(target, EVENT_HIDDEN3, () => {
4811        if (isVisible(this)) {
4812          this.focus();
4813        }
4814      });
4815    });
4816    const alreadyOpen = selector_engine_default.findOne(OPEN_SELECTOR);
4817    if (alreadyOpen) {
4818      Modal.getInstance(alreadyOpen).hide();
4819    }
4820    const data = Modal.getOrCreateInstance(target);
4821    data.toggle(this);
4822  });
4823  enableDismissTrigger(Modal);
4824  defineJQueryPlugin(Modal);
4825
4826  // ns-hugo-imp:/home/ubuntu/.cache/hugo_cache/modules/filecache/modules/pkg/mod/github.com/twbs/[email protected]+incompatible/js/src/tab.js
4827  var NAME6 = "tab";
4828  var DATA_KEY5 = "bs.tab";
4829  var EVENT_KEY5 = `.${DATA_KEY5}`;
4830  var EVENT_HIDE4 = `hide${EVENT_KEY5}`;
4831  var EVENT_HIDDEN4 = `hidden${EVENT_KEY5}`;
4832  var EVENT_SHOW4 = `show${EVENT_KEY5}`;
4833  var EVENT_SHOWN4 = `shown${EVENT_KEY5}`;
4834  var EVENT_CLICK_DATA_API4 = `click${EVENT_KEY5}`;
4835  var EVENT_KEYDOWN = `keydown${EVENT_KEY5}`;
4836  var EVENT_LOAD_DATA_API = `load${EVENT_KEY5}`;
4837  var ARROW_LEFT_KEY = "ArrowLeft";
4838  var ARROW_RIGHT_KEY = "ArrowRight";
4839  var ARROW_UP_KEY2 = "ArrowUp";
4840  var ARROW_DOWN_KEY2 = "ArrowDown";
4841  var HOME_KEY = "Home";
4842  var END_KEY = "End";
4843  var CLASS_NAME_ACTIVE = "active";
4844  var CLASS_NAME_FADE3 = "fade";
4845  var CLASS_NAME_SHOW5 = "show";
4846  var CLASS_DROPDOWN = "dropdown";
4847  var SELECTOR_DROPDOWN_TOGGLE = ".dropdown-toggle";
4848  var SELECTOR_DROPDOWN_MENU = ".dropdown-menu";
4849  var NOT_SELECTOR_DROPDOWN_TOGGLE = `:not(${SELECTOR_DROPDOWN_TOGGLE})`;
4850  var SELECTOR_TAB_PANEL = '.list-group, .nav, [role="tablist"]';
4851  var SELECTOR_OUTER = ".nav-item, .list-group-item";
4852  var SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role="tab"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`;
4853  var SELECTOR_DATA_TOGGLE4 = '[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]';
4854  var SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE4}`;
4855  var SELECTOR_DATA_TOGGLE_ACTIVE = `.${CLASS_NAME_ACTIVE}[data-bs-toggle="tab"], .${CLASS_NAME_ACTIVE}[data-bs-toggle="pill"], .${CLASS_NAME_ACTIVE}[data-bs-toggle="list"]`;
4856  var Tab = class _Tab extends base_component_default {
4857    constructor(element) {
4858      super(element);
4859      this._parent = this._element.closest(SELECTOR_TAB_PANEL);
4860      if (!this._parent) {
4861        return;
4862      }
4863      this._setInitialAttributes(this._parent, this._getChildren());
4864      event_handler_default.on(this._element, EVENT_KEYDOWN, (event) => this._keydown(event));
4865    }
4866    // Getters
4867    static get NAME() {
4868      return NAME6;
4869    }
4870    // Public
4871    show() {
4872      const innerElem = this._element;
4873      if (this._elemIsActive(innerElem)) {
4874        return;
4875      }
4876      const active = this._getActiveElem();
4877      const hideEvent = active ? event_handler_default.trigger(active, EVENT_HIDE4, { relatedTarget: innerElem }) : null;
4878      const showEvent = event_handler_default.trigger(innerElem, EVENT_SHOW4, { relatedTarget: active });
4879      if (showEvent.defaultPrevented || hideEvent && hideEvent.defaultPrevented) {
4880        return;
4881      }
4882      this._deactivate(active, innerElem);
4883      this._activate(innerElem, active);
4884    }
4885    // Private
4886    _activate(element, relatedElem) {
4887      if (!element) {
4888        return;
4889      }
4890      element.classList.add(CLASS_NAME_ACTIVE);
4891      this._activate(selector_engine_default.getElementFromSelector(element));
4892      const complete = () => {
4893        if (element.getAttribute("role") !== "tab") {
4894          element.classList.add(CLASS_NAME_SHOW5);
4895          return;
4896        }
4897        element.removeAttribute("tabindex");
4898        element.setAttribute("aria-selected", true);
4899        this._toggleDropDown(element, true);
4900        event_handler_default.trigger(element, EVENT_SHOWN4, {
4901          relatedTarget: relatedElem
4902        });
4903      };
4904      this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE3));
4905    }
4906    _deactivate(element, relatedElem) {
4907      if (!element) {
4908        return;
4909      }
4910      element.classList.remove(CLASS_NAME_ACTIVE);
4911      element.blur();
4912      this._deactivate(selector_engine_default.getElementFromSelector(element));
4913      const complete = () => {
4914        if (element.getAttribute("role") !== "tab") {
4915          element.classList.remove(CLASS_NAME_SHOW5);
4916          return;
4917        }
4918        element.setAttribute("aria-selected", false);
4919        element.setAttribute("tabindex", "-1");
4920        this._toggleDropDown(element, false);
4921        event_handler_default.trigger(element, EVENT_HIDDEN4, { relatedTarget: relatedElem });
4922      };
4923      this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE3));
4924    }
4925    _keydown(event) {
4926      if (![ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY2, ARROW_DOWN_KEY2, HOME_KEY, END_KEY].includes(event.key)) {
4927        return;
4928      }
4929      event.stopPropagation();
4930      event.preventDefault();
4931      const children = this._getChildren().filter((element) => !isDisabled(element));
4932      let nextActiveElement;
4933      if ([HOME_KEY, END_KEY].includes(event.key)) {
4934        nextActiveElement = children[event.key === HOME_KEY ? 0 : children.length - 1];
4935      } else {
4936        const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY2].includes(event.key);
4937        nextActiveElement = getNextActiveElement(children, event.target, isNext, true);
4938      }
4939      if (nextActiveElement) {
4940        nextActiveElement.focus({ preventScroll: true });
4941        _Tab.getOrCreateInstance(nextActiveElement).show();
4942      }
4943    }
4944    _getChildren() {
4945      return selector_engine_default.find(SELECTOR_INNER_ELEM, this._parent);
4946    }
4947    _getActiveElem() {
4948      return this._getChildren().find((child) => this._elemIsActive(child)) || null;
4949    }
4950    _setInitialAttributes(parent, children) {
4951      this._setAttributeIfNotExists(parent, "role", "tablist");
4952      for (const child of children) {
4953        this._setInitialAttributesOnChild(child);
4954      }
4955    }
4956    _setInitialAttributesOnChild(child) {
4957      child = this._getInnerElement(child);
4958      const isActive = this._elemIsActive(child);
4959      const outerElem = this._getOuterElement(child);
4960      child.setAttribute("aria-selected", isActive);
4961      if (outerElem !== child) {
4962        this._setAttributeIfNotExists(outerElem, "role", "presentation");
4963      }
4964      if (!isActive) {
4965        child.setAttribute("tabindex", "-1");
4966      }
4967      this._setAttributeIfNotExists(child, "role", "tab");
4968      this._setInitialAttributesOnTargetPanel(child);
4969    }
4970    _setInitialAttributesOnTargetPanel(child) {
4971      const target = selector_engine_default.getElementFromSelector(child);
4972      if (!target) {
4973        return;
4974      }
4975      this._setAttributeIfNotExists(target, "role", "tabpanel");
4976      if (child.id) {
4977        this._setAttributeIfNotExists(target, "aria-labelledby", `${child.id}`);
4978      }
4979    }
vendor: 2,132 bytes, lines 4980-5041
4980    _toggleDropDown(element, open) {
4981      const outerElem = this._getOuterElement(element);
4982      if (!outerElem.classList.contains(CLASS_DROPDOWN)) {
4983        return;
4984      }
4985      const toggle = (selector, className) => {
4986        const element2 = selector_engine_default.findOne(selector, outerElem);
4987        if (element2) {
4988          element2.classList.toggle(className, open);
4989        }
4990      };
4991      toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE);
4992      toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW5);
4993      outerElem.setAttribute("aria-expanded", open);
4994    }
4995    _setAttributeIfNotExists(element, attribute, value) {
4996      if (!element.hasAttribute(attribute)) {
4997        element.setAttribute(attribute, value);
4998      }
4999    }
5000    _elemIsActive(elem) {
5001      return elem.classList.contains(CLASS_NAME_ACTIVE);
5002    }
5003    // Try to get the inner element (usually the .nav-link)
5004    _getInnerElement(elem) {
5005      return elem.matches(SELECTOR_INNER_ELEM) ? elem : selector_engine_default.findOne(SELECTOR_INNER_ELEM, elem);
5006    }
5007    // Try to get the outer element (usually the .nav-item)
5008    _getOuterElement(elem) {
5009      return elem.closest(SELECTOR_OUTER) || elem;
5010    }
5011    // Static
5012    static jQueryInterface(config) {
5013      return this.each(function() {
5014        const data = _Tab.getOrCreateInstance(this);
5015        if (typeof config !== "string") {
5016          return;
5017        }
5018        if (data[config] === void 0 || config.startsWith("_") || config === "constructor") {
5019          throw new TypeError(`No method named "${config}"`);
5020        }
5021        data[config]();
5022      });
5023    }
5024  };
5025  event_handler_default.on(document, EVENT_CLICK_DATA_API4, SELECTOR_DATA_TOGGLE4, function(event) {
5026    if (["A", "AREA"].includes(this.tagName)) {
5027      event.preventDefault();
5028    }
5029    if (isDisabled(this)) {
5030      return;
5031    }
5032    Tab.getOrCreateInstance(this).show();
5033  });
5034  event_handler_default.on(window, EVENT_LOAD_DATA_API, () => {
5035    for (const element of selector_engine_default.find(SELECTOR_DATA_TOGGLE_ACTIVE)) {
5036      Tab.getOrCreateInstance(element);
5037    }
5038  });
5039  defineJQueryPlugin(Tab);
5040})();
5041</script>
5041
5042
5043
5044
5045
5046
5047
5048
5049
5050
5051
5052
5053
5054
5055
5056
5057
5058
5059
5060
5061
5062
5063
5064
5065
5066
5067
5068
5069
5070
5071<script
5072  crossorigin="anonymous"
5073  integrity="sha256-GPgIz79V/BDNsBSKZLOApH4OjmK6zL33KrXLfOba2po="
5074  src="/js/scripts.min.18f808cfbf55fc10cdb0148a64b380a47e0e8e62baccbdf72ab5cb7ce6dada9a.js"></script>
5074
5075
5076
5077
5078
5079
5080<script type="application/javascript">
5081  WebFont.load({
5082    google: {
5083      api: 'https://fonts.googleapis.com/css2',
5084      families: ['Rubik:ital,wght@0,300..900;1,300..900','Rubik:ital,wght@0,300..900;1,300..900&display=swap'],
5085      version: 2
5086    },
5087    active: () => {sessionStorage.fontsLoaded = true}
5088  });
5089</script>
5089
5090
5091
5092
5093<script>
5094  if ('serviceWorker' in navigator){navigator.serviceWorker.register("/service-worker.js");}
5095</script>
5095
5096
5097
5098
5099
5100
5101
5102
5103
5104	
5105</body>
5106
5107</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.