PageSourceSearch

https://justbuildthings.com/_next/static/chunks/5705.2cc37723b7863a77.js

js justbuildthings.com collected 2026-09-24 11:49:55 UTC 42,570 bytes, 494 lines download raw bytes

1(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[5705],{5379:(e,t,r)=>{"use strict";r.d(t,{D:()=>i,N:()=>d});var o=r(12115),s=["light","dark"],n="(prefers-color-scheme: dark)",a=o.createContext(void 0),l={setTheme:e=>{},themes:[]},i=()=>{var e;return null!=(e=o.useContext(a))?e:l},d=e=>o.useContext(a)?e.children:o.createElement(p,{...e}),c=["light","dark"],p=e=>{let{forcedTheme:t,disableTransitionOnChange:r=!1,enableSystem:l=!0,enableColorScheme:i=!0,storageKey:d="theme",themes:p=c,defaultTheme:f=l?"system":"light",attribute:w="data-theme",value:b,children:v,nonce:y}=e,[x,k]=o.useState(()=>m(d,f)),[$,N]=o.useState(()=>m(d)),j=b?Object.values(b):p,S=o.useCallback(e=>{let t=e;if(!t)return;"system"===e&&l&&(t=g());let o=b?b[t]:t,n=r?h():null,a=document.documentElement;if("class"===w?(a.classList.remove(...j),o&&a.classList.add(o)):o?a.setAttribute(w,o):a.removeAttribute(w),i){let e=s.includes(f)?f:null,r=s.includes(t)?t:e;a.style.colorScheme=r}null==n||n()},[]),C=o.useCallback(e=>{let t="function"==typeof e?e(e):e;k(t);try{localStorage.setItem(d,t)}catch(e){}},[t]),M=o.useCallback(e=>{N(g(e)),"system"===x&&l&&!t&&S("system")},[x,t]);o.useEffect(()=>{let e=window.matchMedia(n);return e.addListener(M),M(e),()=>e.removeListener(M)},[M]),o.useEffect(()=>{let e=e=>{e.key===d&&C(e.newValue||f)};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)},[C]),o.useEffect(()=>{S(null!=t?t:x)},[t,x]);let R=o.useMemo(()=>({theme:x,setTheme:C,forcedTheme:t,resolvedTheme:"system"===x?$:x,themes:l?[...p,"system"]:p,systemTheme:l?$:void 0}),[x,C,t,$,l,p]);return o.createElement(a.Provider,{value:R},o.createElement(u,{forcedTheme:t,disableTransitionOnChange:r,enableSystem:l,enableColorScheme:i,storageKey:d,themes:p,defaultTheme:f,attribute:w,value:b,children:v,attrs:j,nonce:y}),v)},u=o.memo(e=>{let{forcedTheme:t,storageKey:r,attribute:a,enableSystem:l,enableColorScheme:i,defaultTheme:d,value:c,attrs:p,nonce:u}=e,m="system"===d,h="class"===a?`var d=document.documentElement,c=d.classList;c.remove(${p.map(e=>`'${e}'`).join(",")});`:`var d=document.documentElement,n='${a}',s='setAttribute';`,g=i?(s.includes(d)?d:null)?`if(e==='light'||e==='dark'||!e)d.style.colorScheme=e||'${d}'`:"if(e==='light'||e==='dark')d.style.colorScheme=e":"",f=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=!(arguments.length>2)||void 0===arguments[2]||arguments[2],o=c?c[e]:e,n=t?e+"|| ''":`'${o}'`,l="";return i&&r&&!t&&s.includes(e)&&(l+=`d.style.colorScheme = '${e}';`),"class"===a?t||o?l+=`c.add(${n})`:l+="null":o&&(l+=`d[s](n,${n})`),l},w=t?`!function(){${h}${f(t)}}()`:l?`!function(){try{${h}var e=localStorage.getItem('${r}');if('system'===e||(!e&&${m})){var t='${n}',m=window.matchMedia(t);if(m.media!==t||m.matches){${f("dark")}}else{${f("light")}}}else if(e){${c?`var x=${JSON.stringify(c)};`:""}${f(c?"x[e]":"e",!0)}}${m?"":"else{"+f(d,!1,!1)+"}"}${g}}catch(e){}}()`:`!function(){try{${h}var e=localStorage.getItem('${r}');if(e){${c?`var x=${JSON.stringify(c)};`:""}${f(c?"x[e]":"e",!0)}}else{${f(d,!1,!1)};}${g}}catch(t){}}();`;return o.createElement("script",{nonce:u,dangerouslySetInnerHTML:{__html:w}})}),m=(e,t)=>{let r;try{r=localStorage.getItem(e)||void 0}catch(e){}return r||t},h=()=>{let e=document.createElement("style");return e.appendChild(document.createTextNode("*{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}")),document.head.appendChild(e),()=>{window.getComputedStyle(document.body),setTimeout(()=>{document.head.removeChild(e)},1)}},g=e=>(e||(e=window.matchMedia(n)),e.matches?"dark":"light")},25016:(e,t,r)=>{"use strict";r.d(t,{Ay:()=>a,I5:()=>i,cn:()=>n,vF:()=>l});var o=r(2821),s=r(75889);function n(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];return(0,s.QP)((0,o.$)(t))}function a(e){return e?e.replace(/^\s*(universal|general)\s+/i,"").replace(/\bAnalyzer\b/g,"Analysis").trim():e}let l={log:function(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r]},warn:function(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r]},error:function(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r]},info:function(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r]},debug:function(e){for(var t=arguments.length,r=Array(t>1?t-1:0),o=1;o<t;o++)r[o-1]=arguments[o]}};function i(e){return e?e.replace(/\n[^\n]*\b(?:SHARE\s*CARD\s*[:.]|submit_share_card|here(?:'s| is) the share c
1ard)[\s\S]*$/i,"").replace(/\n+\s*[*_#>\s-]*Headline\s*[:*][\s\S]*?\bHero\s*[:*][\s\S]*$/i,"").replace(/(?:\n+\s*\{[^{}]*\blabel\b[^{}]*\}\s*)+$/i,"").replace(/\n+[^\n]*\{[\s\S]*?"(?:headline|verdict|hero)"[\s\S]*?"rows"\s*:[\s\S]*$/i,"").replace(/\n+[^\n]*\bshareable\s+(?:format|card|version|summary)\b[^\n]*$/i,"").trimEnd():e}},28171:(e,t,r)=>{"use strict";r.d(t,{d:()=>n,o:()=>s});var o=r(18720);let s=Object.assign(function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{title:t,description:r,variant:s,action:n,duration:a}=e,l=t??r??"",i={description:t?r:void 0,action:n,duration:a},d="destructive"===s?o.oR.error(l,i):(0,o.oR)(l,i);return{id:d,dismiss:()=>o.oR.dismiss(d),update:()=>{}}},{success:o.oR.success,error:o.oR.error,warning:o.oR.warning,info:o.oR.info,message:o.oR.message,loading:o.oR.loading,dismiss:o.oR.dismiss});function n(){return{toast:s,dismiss:o.oR.dismiss,toasts:[]}}},47957:(e,t,r)=>{var o=0/0,s=/^\s+|\s+$/g,n=/^[-+]0x[0-9a-f]+$/i,a=/^0b[01]+$/i,l=/^0o[0-7]+$/i,i=parseInt,d="object"==typeof r.g&&r.g&&r.g.Object===Object&&r.g,c="object"==typeof self&&self&&self.Object===Object&&self,p=d||c||Function("return this")(),u=Object.prototype.toString,m=Math.max,h=Math.min,g=function(){return p.Date.now()};function f(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function w(e){if("number"==typeof e)return e;if("symbol"==typeof(t=e)||t&&"object"==typeof t&&"[object Symbol]"==u.call(t))return o;if(f(e)){var t,r="function"==typeof e.valueOf?e.valueOf():e;e=f(r)?r+"":r}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(s,"");var d=a.test(e);return d||l.test(e)?i(e.slice(2),d?2:8):n.test(e)?o:+e}e.exports=function(e,t,r){var o,s,n,a,l,i,d=0,c=!1,p=!1,u=!0;if("function"!=typeof e)throw TypeError("Expected a function");function b(t){var r=o,n=s;return o=s=void 0,d=t,a=e.apply(n,r)}function v(e){var r=e-i,o=e-d;return void 0===i||r>=t||r<0||p&&o>=n}function y(){var e,r,o,s=g();if(v(s))return x(s);l=setTimeout(y,(e=s-i,r=s-d,o=t-e,p?h(o,n-r):o))}function x(e){return(l=void 0,u&&o)?b(e):(o=s=void 0,a)}function k(){var e,r=g(),n=v(r);if(o=arguments,s=this,i=r,n){if(void 0===l)return d=e=i,l=setTimeout(y,t),c?b(e):a;if(p)return l=setTimeout(y,t),b(i)}return void 0===l&&(l=setTimeout(y,t)),a}return t=w(t)||0,f(r)&&(c=!!r.leading,n=(p="maxWait"in r)?m(w(r.maxWait)||0,t):n,u="trailing"in r?!!r.trailing:u),k.cancel=function(){void 0!==l&&clearTimeout(l),d=0,o=i=s=l=void 0},k.flush=function(){return void 0===l?a:x(g())},k}},76654:(e,t,r)=>{"use strict";function o(){if(document.querySelector("link[data-typography-css]"))return;let e=`
2    /* Typography plugin styles */
3    .prose {
4      color: var(--tw-prose-body);
5      max-width: 65ch;
6    }
7    
8    .prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)) {
9      margin-top: 1.25em;
10      margin-bottom: 1.25em;
11    }
12    
13    .prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)) {
14      color: var(--tw-prose-lead);
15      font-size: 1.25em;
16      line-height: 1.6;
17      margin-top: 1.2em;
18      margin-bottom: 1.2em;
19    }
20    
21    .prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)) {
22      color: var(--tw-prose-links);
23      text-decoration: underline;
24      font-weight: 500;
25    }
26    
27    .prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)) {
28      color: var(--tw-prose-bold);
29      font-weight: 600;
30    }
31    
32    .prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)) {
33      list-style-type: decimal;
34      margin-top: 1.25em;
35      margin-bottom: 1.25em;
36      padding-inline-start: 1.625em;
37    }
38    
39    .prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)) {
40      list-style-type: disc;
41      margin-top: 1.25em;
42      margin-bottom: 1.25em;
43      padding-inline-start: 1.625em;
44    }
45    
46    .prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)) {
47      color: var(--tw-prose-headings);
48      font-weight: 800;
49      font-size: 2.25em;
50      margin-top: 0;
51      margin-bottom: 0.8888889em;
52      line-height: 1.1111111;
53    }
54    
55    .prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)) {
56      color: var(--tw-prose-headings);
57      font-weight: 700;
58      font-size: 1.5em;
59      margin-top: 2em;
60      margin-bottom: 1em;
61      line-height: 1.3333333;
62    }
63    
64    .prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)) {
65      color: var(--tw-prose-headings);
66      font-weight: 600;
67      font-size: 1.25em;
68      margin-top: 1.6em;
69      margin-bottom: 0.6em;
70      line-height: 1.6;
71    }
72    
73    .prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)) {
74      color: var(--tw-prose-code);
75      font-weight: 600;
76      font-size: 0.875em;
77    }
78    
79    .prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before {
80      content: "\`";
81    }
82    
83    .prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after {
84      content: "\`";
85    }
86    
87    .prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)) {
88      color: var(--tw-prose-pre-code);
89      background-color: var(--tw-prose-pre-bg);
90      overflow-x: auto;
91      font-weight: 400;
92      font-size: 0.875em;
93      line-height: 1.7142857;
94      margin-top: 1.7142857em;
95      margin-bottom: 1.7142857em;
96      border-radius: 0.375rem;
97      padding-top: 0.8571429em;
98      padding-inline-end: 1.1428571em;
99      padding-bottom: 0.8571429em;
100      padding-inline-start: 1.1428571em;
101    }
102    
103    .prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)) {
104      background-color: initial;
105      border-width: 0;
106      border-radius: 0;
107      padding: 0;
108      font-weight: inherit;
109      color: inherit;
110      font-size: inherit;
111      font-family: inherit;
112      line-height: inherit;
113    }
114    
115    .prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before {
116      content: none;
117    }
118    
119    .prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after {
120      content: none;
121    }
122    
123    .prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)) {
124      font-weight: 500;
125      font-style: italic;
126      color: var(--tw-prose-quotes);
127      border-inline-start-width: 0.25rem;
128      border-inline-start-color: var(--tw-prose-quote-borders);
129      quotes: "\\201C" "\\201D" "\\2018" "\\2019";
130      margin-top: 1.6em;
131      margin-bottom: 1.6em;
132      padding-inline-start: 1em;
133    }
134    
135    .prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before {
136      content: open-quote;
137    }
138    
139    .prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after {
140      content: close-quote;
141    }
142    
143    .prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)) {
144      width: 100%;
145      table-layout: auto;
146      margin-top: 2em;
147      margin-bottom: 2em;
148      font-size: 0.875em;
149      line-height: 1.7142857;
150    }
151    
152    .prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)) {
153      border-bottom-width: 1px;
154      border-bottom-color: var(--tw-prose-th-borders);
155    }
156    
157    .prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)) {
158      color: var(--tw-prose-headings);
159      font-weight: 600;
160      vertical-align: bottom;
161      padding-inline-end: 0.5714286em;
162      padding-bottom: 0.5714286em;
163      padding-inline-start: 0.5714286em;
164    }
165    
166    .prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)) {
167      border-bottom-width: 1px;
168      border-bottom-color: var(--tw-prose-td-borders);
169    }
170    
171    .prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)) {
172      border-bottom-width: 0;
173    }
174    
175    .prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)) {
176      vertical-align: initial;
177    }
178    
179    .prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)) {
180      border-top-width: 1px;
181      border-top-color: var(--tw-prose-th-borders);
182    }
183    
184    .prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)) {
185      vertical-align: top;
186    }
187    
188    .prose :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)) {
189      text-align: start;
190    }
191    
192    .prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)) {
193      margin-top: 0;
194      margin-bottom: 0;
195    }
196    
197    .prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)) {
198      color: var(--tw-prose-captions);
199      font-size: 0.875em;
200      line-height: 1.4285714;
201      margin-top: 0.8571429em;
202    }
203    
204    .prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)) {
205      border-color: var(--tw-prose-hr);
206      border-top-width: 1px;
207      margin-top: 3em;
208      margin-bottom: 3em;
209    }
210    
211    .prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)) {
212      margin-top: 0;
213    }
214    
215    .prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)) {
216      margin-top: 0;
217    }
218    
219    .prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)) {
220      margin-top: 0;
221    }
222    
223    .prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)) {
224      margin-top: 0;
225    }
226    
227    .prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)) {
228      margin-top: 0.5em;
229      margin-bottom: 0.5em;
230    }
231    
232    .prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)) {
233      padding-inline-start: 0.375em;
234    }
235    
236    .prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)) {
237      padding-inline-start: 0.375em;
238    }
239    
240    .prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)) {
241      margin-top: 0.75em;
242      margin-bottom: 0.75em;
243    }
244    
245    .prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)) {
246      margin-top: 1.25em;
247      margin-bottom: 1.25em;
248    }
249    
250    .prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)) {
251      color: var(--tw-prose-headings);
252      font-weight: 600;
253      margin-top: 1.25em;
254    }
255    
256    .prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)) {
257      margin-top: 0.5em;
258      padding-inline-start: 1.625em;
259    }
260    
261    .prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)) {
262      margin-top: 2em;
263      margin-bottom: 2em;
264    }
265    
266    .prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)) {
267      margin-top: 0;
268      margin-bottom: 0;
269    }
270    
271    .prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)) {
272      margin-top: 2em;
273      margin-bottom: 2em;
274    }
275    
276    .prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)) {
277      margin-top: 2em;
278      margin-bottom: 2em;
279    }
280    
281    .prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)) {
282      font-weight: 500;
283      font-family: inherit;
284      color: var(--tw-prose-kbd);
285      box-shadow: 0 0 0 1px rgb(var(--tw-prose-kbd-shadows)/10%), 0 3px 0 rgb(var(--tw-prose-kbd-shadows)/10%);
286      font-size: 0.875em;
287      border-radius: 0.3125rem;
288      padding-top: 0.1875em;
289      padding-inline-end: 0.375em;
290      padding-bottom: 0.1875em;
291      padding-inline-start: 0.375em;
292    }
293    
294    .prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)) {
295      color: inherit;
296    }
297    
298    .prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)) {
299      color: inherit;
300    }
301    
302    .prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)) {
303      color: inherit;
304      font-size: 0.875em;
305    }
306    
307    .prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)) {
308      color: inherit;
309      font-size: 0.9em;
310    }
311    
312    .prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)) {
313      color: inherit;
314    }
315    
316    .prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)) {
317      color: inherit;
318    }
319    
320    .prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)) {
321      color: inherit;
322    }
323    
324    .prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)) {
325      color: inherit;
326    }
327    
328    .prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)) {
329      color: inherit;
330    }
331    
332    .prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)) {
333      color: inherit;
334    }
335    
336    .prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker {
337      font-weight: 400;
338      color: var(--tw-prose-counters);
339    }
340    
341    .prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker {
342      color: var(--tw-prose-bullets);
343    }
344    
345    .prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)) {
346      padding-inline-start: 0;
347    }
348    
349    .prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)) {
350      padding-inline-end: 0;
351    }
352    
353    .prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)) {
354      padding-top: 0.5714286em;
355      padding-inline-end: 0.5714286em;
356      padding-bottom: 0.5714286em;
357      padding-inline-start: 0.5714286em;
358    }
359    
360    .prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)) {
361      padding-inline-start: 0;
362    }
363    
364    .prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)) {
365      padding-inline-end: 0;
366    }
367    
368    .prose :where(>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)) {
369      margin-top: 0;
370    }
371    
372    .prose :where(>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)) {
373      margin-bottom: 0;
374    }
375    
376    .prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)) {
377      margin-top: 1.25em;
378    }
379    
380    .prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)) {
381      margin-bottom: 1.25em;
382    }
383    
384    .prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)) {
385      margin-top: 1.25em;
386    }
387    
388    .prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)) {
389      margin-bottom: 1.25em;
390    }
391    
392    .prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)) {
393      margin-top: 0.75em;
394      margin-bottom: 0.75em;
395    }
396    
397    .prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)) {
398      margin-top: 0.75em;
399      margin-bottom: 0.75em;
400    }
401    
402    .prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)) {
403      margin-top: 0.75em;
404      margin-bottom: 0.75em;
405    }
406    
407    .prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)) {
408      margin-top: 0.75em;
409      margin-bottom: 0.75em;
410    }
411    
412    /* Dark mode prose styles */
413    .dark .prose {
414      --tw-prose-body: #d1d5db;
415      --tw-prose-headings: #fff;
416      --tw-prose-lead: #9ca3af;
417      --tw-prose-links: #fff;
418      --tw-prose-bold: #fff;
419      --tw-prose-counters: #9ca3af;
420      --tw-prose-bullets: #4b5563;
421      --tw-prose-hr: #374151;
422      --tw-prose-quotes: #f3f4f6;
423      --tw-prose-quote-borders: #374151;
424      --tw-prose-captions: #9ca3af;
425      --tw-prose-kbd: #fff;
426      --tw-prose-kbd-shadows: 255 255 255;
427      --tw-prose-code: #fff;
428      --tw-prose-pre-code: #d1d5db;
429      --tw-prose-pre-bg: rgb(0 0 0/50%);
430      --tw-prose-th-borders: #4b5563;
431      --tw-prose-td-borders: #374151;
432    }
433    
434    .prose-invert {
435      --tw-prose-body: var(--tw-prose-invert-body);
436      --tw-prose-headings: var(--tw-prose-invert-headings);
437      --tw-prose-lead: var(--tw-prose-invert-lead);
438      --tw-prose-links: var(--tw-prose-invert-links);
439      --tw-prose-bold: var(--tw-prose-invert-bold);
440      --tw-prose-counters: var(--tw-prose-invert-counters);
441      --tw-prose-bullets: var(--tw-prose-invert-bullets);
442      --tw-prose-hr: var(--tw-prose-invert-hr);
443      --tw-prose-quotes: var(--tw-prose-invert-quotes);
444      --tw-prose-quote-borders: var(--tw-prose-invert-quote-borders);
445      --tw-prose-captions: var(--tw-prose-invert-captions);
446      --tw-prose-kbd: var(--tw-prose-invert-kbd);
447      --tw-prose-kbd-shadows: var(--tw-prose-invert-kbd-shadows);
448      --tw-prose-code: var(--tw-prose-invert-code);
449      --tw-prose-pre-code: var(--tw-prose-invert-pre-code);
450      --tw-prose-pre-bg: var(--tw-prose-invert-pre-bg);
451      --tw-prose-th-borders: var(--tw-prose-invert-th-borders);
452      --tw-prose-td-borders: var(--tw-prose-invert-td-borders);
453    }
454    
455    /* CSS variables for prose colors */
456    :root {
457      --tw-prose-body: #374151;
458      --tw-prose-headings: #111827;
459      --tw-prose-lead: #4b5563;
460      --tw-prose-links: #111827;
461      --tw-prose-bold: #111827;
462      --tw-prose-counters: #6b7280;
463      --tw-prose-bullets: #d1d5db;
464      --tw-prose-hr: #e5e7eb;
465      --tw-prose-quotes: #111827;
466      --tw-prose-quote-borders: #e5e7eb;
467      --tw-prose-captions: #6b7280;
468      --tw-prose-kbd: #111827;
469      --tw-prose-kbd-shadows: 17 24 39;
470      --tw-prose-code: #111827;
471      --tw-prose-pre-code: #e5e7eb;
472      --tw-prose-pre-bg: #1f2937;
473      --tw-prose-th-borders: #d1d5db;
474      --tw-prose-td-borders: #e5e7eb;
475      --tw-prose-invert-body: #d1d5db;
476      --tw-prose-invert-headings: #fff;
477      --tw-prose-invert-lead: #9ca3af;
478      --tw-prose-invert-links: #fff;
479      --tw-prose-invert-bold: #fff;
480      --tw-prose-invert-counters: #9ca3af;
481      --tw-prose-invert-bullets: #4b5563;
482      --tw-prose-invert-hr: #374151;
483      --tw-prose-invert-quotes: #f3f4f6;
484      --tw-prose-invert-quote-borders: #374151;
485      --tw-prose-invert-captions: #9ca3af;
486      --tw-prose-invert-kbd: #fff;
487      --tw-prose-invert-kbd-shadows: 255 255 255;
488      --tw-prose-invert-code: #fff;
489      --tw-prose-invert-pre-code: #d1d5db;
490      --tw-prose-invert-pre-bg: rgb(0 0 0/50%);
491      --tw-prose-invert-th-borders: #4b5563;
492      --tw-prose-invert-td-borders: #374151;
493    }
494  `,t=document.createElement("style");t.setAttribute("data-typography-css","true"),t.textContent=e,document.head.appendChild(t),document.body.classList.add("typography-loaded")}function s(){if(document.querySelector("link[data-mapbox-css]"))return;let e=document.createElement("link");e.rel="stylesheet",e.href="https://api.mapbox.com/mapbox-gl-js/v2.15.0/mapbox-gl.css",e.setAttribute("data-mapbox-css","true"),document.head.appendChild(e)}r.d(t,{J:()=>
494o,t:()=>s})},83101:(e,t,r)=>{"use strict";r.d(t,{F:()=>a});var o=r(2821);let s=e=>"boolean"==typeof e?`${e}`:0===e?"0":e,n=o.$,a=(e,t)=>r=>{var o;if((null==t?void 0:t.variants)==null)return n(e,null==r?void 0:r.class,null==r?void 0:r.className);let{variants:a,defaultVariants:l}=t,i=Object.keys(a).map(e=>{let t=null==r?void 0:r[e],o=null==l?void 0:l[e];if(null===t)return null;let n=s(t)||s(o);return a[e][n]}),d=r&&Object.entries(r).reduce((e,t)=>{let[r,o]=t;return void 0===o||(e[r]=o),e},{});return n(e,i,null==t||null==(o=t.compoundVariants)?void 0:o.reduce((e,t)=>{let{class:r,className:o,...s}=t;return Object.entries(s).every(e=>{let[t,r]=e;return Array.isArray(r)?r.includes({...l,...d}[t]):({...l,...d})[t]===r})?[...e,r,o]:e},[]),null==r?void 0:r.class,null==r?void 0:r.className)}},83209:(e,t,r)=>{"use strict";r.d(t,{BT:()=>d,Wu:()=>c,ZB:()=>i,Zp:()=>a,aR:()=>l,wL:()=>p});var o=r(95155),s=r(12115),n=r(25016);let a=s.forwardRef((e,t)=>{let{className:r,...s}=e;return(0,o.jsx)("div",{ref:t,className:(0,n.cn)("rounded-lg border bg-card text-card-foreground shadow-sm",r),...s})});a.displayName="Card";let l=s.forwardRef((e,t)=>{let{className:r,...s}=e;return(0,o.jsx)("div",{ref:t,className:(0,n.cn)("flex flex-col space-y-1.5 p-6",r),...s})});l.displayName="CardHeader";let i=s.forwardRef((e,t)=>{let{className:r,...s}=e;return(0,o.jsx)("h3",{ref:t,className:(0,n.cn)("text-2xl font-semibold leading-none tracking-tight",r),...s})});i.displayName="CardTitle";let d=s.forwardRef((e,t)=>{let{className:r,...s}=e;return(0,o.jsx)("p",{ref:t,className:(0,n.cn)("text-sm text-muted-foreground",r),...s})});d.displayName="CardDescription";let c=s.forwardRef((e,t)=>{let{className:r,...s}=e;return(0,o.jsx)("div",{ref:t,className:(0,n.cn)("p-6 pt-0",r),...s})});c.displayName="CardContent";let p=s.forwardRef((e,t)=>{let{className:r,...s}=e;return(0,o.jsx)("div",{ref:t,className:(0,n.cn)("flex items-center p-6 pt-0",r),...s})});p.displayName="CardFooter"},85705:(e,t,r)=>{"use strict";r.r(t),r.d(t,{RadioClient:()=>k});var o=r(95155),s=r(12115),n=r(81368),a=r(35299),l=r(53511),i=r(85921),d=r(43152),c=r(97003),p=r(83209),u=r(5379),m=r(67909),h=r(47957),g=r.n(h),f=r(28171),w=r(76654),b=r(25016);let v=(0,m.default)(()=>r.e(1626).then(r.bind(r,49353)).then(e=>e.Marker),{loadableGenerated:{webpack:()=>[49353]},ssr:!1}),y=(0,m.default)(()=>r.e(1626).then(r.bind(r,49353)).then(e=>e.Popup),{loadableGenerated:{webpack:()=>[49353]},ssr:!1});function x(e){let{initialStations:t}=e,{resolvedTheme:m}=(0,u.D)();s.useEffect(()=>{(0,w.t)()},[]);let[h,x]=s.useState({latitude:30,longitude:10,zoom:1.5,pitch:0,bearing:0}),[k,$]=s.useState(t),[N,j]=s.useState(null),[S,C]=s.useState(!1),[M,R]=s.useState("idle"),A=s.useRef(null),E=s.useRef(null),{toast:T}=(0,f.d)(),[z,I]=s.useState(null),[F,O]=s.useState(!1),[D,L]=s.useState("All"),[P,q]=s.useState(t),[U,Z]=s.useState(!1),H=s.useMemo(()=>{let e=["All","Pop","Rock","Hip Hop","Electronic","Dance","Techno","House","Jazz","Classical","Country","Folk","Blues","R&B","Reggae","Punk","Metal","Alternative","Indie","Lo-Fi","Ambient","Trance","Dubstep","Funk","Soul","Gospel","Latin","World","News","Talk","Sports"].filter(e=>{if("All"===e)return!0;let t=k.some(t=>{var r;return null==(r=t.genre)?void 0:r.toLowerCase().includes(e.toLowerCase())});if(t){let t=k.filter(t=>{var r;return null==(r=t.genre)?void 0:r.toLowerCase().includes(e.toLowerCase())}).length;b.vF.debug("Radio",`Genre "${e}" has ${t} stations`)}return t});return b.vF.debug("Radio","Available genres:",e),b.vF.debug("Radio","Sample station genres:",k.slice(0,5).map(e=>({name:e.name,genre:e.genre}))),e},[k]);s.useEffect(()=>{if("All"===D)q(k);else{let e=k.filter(e=>{var t;return null==(t=e.genre)?void 0:t.toLowerCase().includes(D.toLowerCase())});b.vF.debug("Radio",`Selected genre: ${D}, Found ${e.length} stations out of ${k.length} total`),e.length>0&&b.vF.debug("Radio","Sample filtered stations:",e.slice(0,3).map(e=>({name:e.name,genre:e.genre}))),q(e)}},[k,D]);let W=s.useRef(Math.random().toString(36).substring(2,7)),G=s.useCallback((e,t)=>{b.vF.debug("Radio",`Map Styling: ${e}`,t||"")},[]);s.useEffect(()=>{},[]);let B=s.useCallback((e,t)=>{G(`Audio error for station ${t.name}:`,e);let r="This station is currently unavailable.";e&&"message"in e&&(G(`Error message: ${e.message}`),e.message.includes("CORS")?r="CORS policy prevents playing this station.":e.message.includes("format")&&(r="Audio format not supported by your browser.")),T({title:"Station Unavailable",description:r,variant:"destructive"}),(null==N?void 0:N.id)===t.id?(R("error"),C(!1)):G(`Error for non-selected station ${t.name}, not changing global loading/playing state.`)},[G,T,N]),_=s.useRef({}),Q=s.useCallback((e,t)=>{var r;null==(r=E.current)||r.flyTo({center:[t,e],zoom:4,duration:2e3,essential:!0})},[]),J=s.useMemo(()=>g()(async e=>{var t;let r=Math.random().toString(36).substring(2,7),o=W.current;b.vF.debug("Radio",`[${o} | Click ${r}] Click for station: ${e.name}. Current audioRef src:`,null==(t=A.current)?void 0:t.src);try{let t=A.current;t?(b.vF.debug("Radio",`[${o} | Click ${r}] Pausing and clearing previousAudioElement src:`,t.src),t.pause(),t.src=""):b.vF.debug("Radio",`[${o} | Click ${r}] No previousAudioElement to cleanup`),C(!1),R("loading"),j(e),Q(e.latitude,e.longitude);let s=new Audio;s.crossOrigin="anonymous",s.onerror=()=>{G(`[Radio ${o} | Click ${r}] newAudioElement.onerror event triggered for station: ${e.name}`,s.error),B(s.error,e)},s.addEventListener("error",t=>{G(`[Radio ${o} | Click ${r}] newAudioElement general error event for station: ${e.name}`,t),B(t,e)}),s.src=e.url,await s.load(),b.vF.debug("Radio",`[${o} | Click ${r}] New audio element created for ${e.name}. Attempting to play src:`,s.src);let n=s.play();void 0!==n?(await n,b.vF.debug("Radio",`[${o} | Click ${r}] Play promise resolved for ${e.name}. Setting audioRef to new element`),A.current=s,C(!0),R("playing")):(R("error"),C(!1)),G(`Playing station: ${e.name} (${e.url})`)}catch(e){T({title:"Station Error",description:"Unable to play this station. Please try another one.",variant:"destructive"}),R("error"),C(!1)}},500),[Q,G,B,T]),X=s.useMemo(()=>{let e={};for(let t of(G("Recalculating stationGrid..."),_.current={},G("Cleared marker cache due to stationGrid change"),P)){let r=Math.floor(t.latitude/5),o=Math.floor(t.longitude/5),s=`${r},${o}`;e[s]||(e[s]=[]),e[s].push(t)}return e},[P,G]),V=s.useMemo(()=>
494{if(G(`Recalculating visibleMarkers... stationGrid has ${Object.keys(X).length} cells`),0===Object.keys(X).length)return G("stationGrid is empty, returning empty markers array"),[];let e=h.zoom,t=Math.max(2,10-2*e),r=`${Math.round(2*h.latitude)/2},${Math.round(2*h.longitude)/2},${e}`;if(_.current[r])return _.current[r];Object.keys(_.current).length>50&&(_.current={});let s=Math.floor((h.latitude-t)/5),n=Math.floor((h.latitude+t)/5),a=Math.floor((h.longitude-t)/5),l=Math.floor((h.longitude+t)/5),i=new Set;for(let e=s;e<=n;e++)for(let t=a;t<=l;t++){let r=`${e},${t}`;if(X[r])for(let e of X[r])i.add(e)}let d=Array.from(i).map(e=>(0,o.jsx)(v,{latitude:e.latitude,longitude:e.longitude,children:(0,o.jsxs)("button",{type:"button",className:"relative group cursor-pointer p-0 bg-transparent border-none block",onMouseEnter:()=>I(e),onMouseLeave:()=>I(null),onClick:()=>J(e),"aria-label":`Play station ${e.name}`,children:[(0,o.jsx)("div",{className:"absolute -inset-3 rounded-full"}),(0,o.jsx)("div",{className:`w-2 h-2 rounded-full relative ${(null==N?void 0:N.id)===e.id?"bg-primary animate-pulse shadow-sm shadow-primary/50":"bg-primary/60 group-hover:bg-primary/80"}`})]})},`marker-${e.id}`));return G(`Created ${d.length} visible markers from ${i.size} unique stations`),_.current[r]=d,d},[h.latitude,h.longitude,h.zoom,X,null==N?void 0:N.id,G,J]),K=async()=>{let e=W.current;if(!N||!A.current)return void b.vF.debug("Radio",`[${e} | TogglePlay] Aborted: no selectedStation or audioRef.current`);b.vF.debug("Radio",`[${e} | TogglePlay] Toggling. Current state: ${S?"playing":"paused"}. Station: ${N.name}`);try{if(S)A.current.pause(),A.current.src="",C(!1),R("idle");else{R("loading");let e=new Audio;e.crossOrigin="anonymous",e.src=N.url,await e.load();let t=e.play();void 0!==t&&(await t,A.current=e,C(!0),R("playing"))}}catch(e){T({title:"Playback Error",description:"Unable to play this station. Please try again.",variant:"destructive"}),C(!1),R("error")}},Y=s.useCallback(()=>{let e;if(0!==P.length){if(1===P.length)e=P[0];else do{let t=Math.floor(Math.random()*P.length);e=P[t]}while(e.id===(null==N?void 0:N.id)&&P.length>1);J(e)}},[P,null==N?void 0:N.id,J]),ee=s.useMemo(()=>g()(e=>{x(e)},8),[]);s.useEffect(()=>{let e=W.current;return b.vF.debug("Radio",`[${e}] Component instance MOUNTED`),()=>{b.vF.debug("Radio",`[${e}] Component instance UNMOUNTING. Cleaning up audioRef:`,A.current),A.current&&(b.vF.debug("Radio",`[${e}] Unmount: Pausing and clearing src for:`,A.current.src),A.current.pause(),A.current.src="",A.current=null),b.vF.debug("Radio",`[${e}] Unmount: Cancelling debouncedStationClick`),J.cancel(),b.vF.debug("Radio",`[${e}] Unmount: Cancelling debouncedSetViewState`),ee.cancel(),b.vF.debug("Radio",`[${e}] Component instance UNMOUNTED and cleaned up`)}},[J,ee]);let[et,er]=s.useState(null);s.useEffect(()=>{r.e(1626).then(r.bind(r,49353)).then(e=>{let t=e.Map||e.default;t&&er(()=>t)}).catch(e=>{})},[]),s.useEffect(()=>{let e=async()=>{try{O(!0);let e=await fetch("/api/stations");if(!e.ok)throw Error(`API request failed: ${e.statusText} (status: ${e.status})`);let t=await e.json();t&&t.length>0&&($(t),G(`Loaded ${t.length} stations from API via /api/stations`))}catch(e){G("Failed to fetch stations via /api/stations:",e),T({title:"Limited Stations Available",description:"The radio station database is temporarily unavailable. We've provided a few stations to enjoy while we work to restore full service.",variant:"default"})}finally{O(!1)}};t.length<=5&&e()},[T,t.length,G]);let eo=s.useCallback(()=>{if(!E.current)return void G("Map ref not available, cannot apply style changes.");let e=E.current.getMap();if(!e)return void G("Map instance not available, cannot apply style changes.");let t=e.getStyle();if(!t||!t.layers)return void G("Map style or layers not available for modification.");G("All available layer IDs in current style:",t.layers.map(e=>e.id));try{e.getTerrain()?(e.setTerrain(null),G("Terrain disabled.")):G("Terrain not active or not supported by style, no change made.")}catch(e){G("Error attempting to disable terrain:",e)}let r="light"===m?"#FFFFFF":"#000000",o="light"===m?"white":"black";G(`Applying land color: ${o} for ${m} theme.`);let s=!1;for(let t of["land","landcover","background","earth"]){let n=e.getLayer(t);if(n)try{let a="background"===n.type?"background-color":"fill-color";"fill"===n.type||"background"===n.type?(e.setPaintProperty(t,a,r),G(`SUCCESS: Set '${a}' of layer '${t}' (type: ${n.type}) to ${o}.`),s=!0):G(`INFO: Layer '${t}' found, but it's type '${n.type}', not 'fill' or 'background'. No color change applied.`)}catch(e){G(`ERROR setting color for layer '${t}':`,e)}}s||G(`WARNING: No suitable land/background layer found from candidates to change color for ${m} theme.`);
494let n=["road","bridge","tunnel","highway","street","transit","place-town","place-village","place-hamlet","place-suburb","place-neighbourhood","settlement-minor-label","settlement-subdivision-label","state-label","capital","poi-label","airport-label"],a=0;for(let r of t.layers){let t=!1;for(let e of n)if("string"==typeof e&&r.id.includes(e)){t=!0;break}if(t)try{e.getLayer(r.id)&&(e.setLayoutProperty(r.id,"visibility","none"),G(`SUCCESS: Hid label layer '${r.id}'.`),a++)}catch(e){G(`ERROR hiding label layer '${r.id}':`,e)}}0===a?G("INFO: No label layers were hidden based on current patterns. Check 'All available layer IDs' and refine 'labelLayerPatternsToHide'."):G(`Total label layers hidden: ${a}`)},[G,m]);return(0,o.jsxs)("div",{className:"fixed inset-0 bg-background overflow-hidden",style:{width:"100vw !important",height:"100vh !important",margin:"0 !important",padding:"0 !important",position:"fixed",top:0,left:0,right:0,bottom:0,zIndex:10},children:[(0,o.jsx)("div",{className:"absolute inset-0 w-full h-full",children:(0,o.jsx)("div",{className:"absolute inset-0 w-full h-full",children:et?(0,o.jsxs)(et,{ref:E,...h,onMove:e=>ee(e.viewState),onLoad:()=>{G("Map loaded (onLoad event), applying custom styles."),eo()},onStyleData:()=>{var e;let t=null==(e=E.current)?void 0:e.getMap();(null==t?void 0:t.isStyleLoaded())?(G("Map style data changed and loaded, applying custom styles."),eo()):t&&t.once("styledata",()=>{G("Map style data fully loaded (deferred), applying custom styles."),eo()})},mapStyle:"dark"===m?"mapbox://styles/mapbox/dark-v11?optimize=true":"mapbox://styles/mapbox/light-v11?optimize=true",mapboxAccessToken:"pk.eyJ1IjoiMHhyYXNpdCIsImEiOiJjbTNtYXZsbXkwdTFiMnFxejVoeXdpeXk4In0.FTO1zNw-ox_vNsybUWnzKw",style:{position:"absolute",inset:0,width:"100vw",height:"100vh",filter:"dark"===m?"brightness(85%)":"grayscale(100%) brightness(105%)"},attributionControl:!1,projection:{name:"globe"},fog:{"horizon-blend":.1,"star-intensity":.15,"space-color":"dark"===m?"#000000":"#ffffff",range:[.1,3],"high-color":"dark"===m?"#000000":"#ffffff"},dragRotate:!1,dragPan:!0,scrollZoom:!0,keyboard:!0,minZoom:1,maxZoom:18,reuseMaps:!0,renderWorldCopies:!1,maxBounds:[[-180,-85],[180,85]],trackResize:!1,antialias:!1,preserveDrawingBuffer:!1,children:[V,z&&(0,o.jsx)(y,{latitude:z.latitude,longitude:z.longitude,closeButton:!1,closeOnClick:!1,anchor:"left",offset:10,className:"bg-white shadow-lg rounded-xl z-30 p-0 border-none",children:(0,o.jsxs)("div",{className:"flex items-center gap-3 p-3 min-w-[200px]",children:[(0,o.jsx)("div",{className:"bg-gray-100 rounded-lg p-2 flex-shrink-0",children:(0,o.jsx)("div",{className:"w-4 h-4 rounded-full bg-gray-400"})}),(0,o.jsxs)("div",{className:"flex-1",children:[(0,o.jsx)("p",{className:"font-semibold text-black",children:z.name}),(0,o.jsx)("p",{className:"text-sm text-gray-500",children:z.country})]})]})})]}):(0,o.jsx)("div",{className:"flex items-center justify-center w-full h-full",children:(0,o.jsx)(a.A,{className:"h-12 w-12 animate-spin text-primary"})})})}),(0,o.jsx)("div",{className:"absolute top-8 md:left-1/2 md:-translate-x-1/2 z-50 w-full md:px-4 md:w-auto",children:(0,o.jsx)(p.Zp,{className:"bg-background/95 backdrop-blur-sm border-none shadow-lg rounded-3xl max-w-[90vw] md:min-w-[300px] mx-auto",children:(0,o.jsxs)(p.Wu,{className:"flex flex-col items-center py-4 px-6",children:[(0,o.jsx)("p",{className:"text-lg text-foreground",children:"Radio"}),(0,o.jsx)("p",{className:"text-sm text-muted-foreground text-center",children:"Click on stations to tune in and discover radio from around the globe"}),F&&(0,o.jsxs)("div",{className:"flex items-center mt-2 text-xs text-muted-foreground",children:[(0,o.jsx)(a.A,{className:"h-3 w-3 mr-1 animate-spin"}),(0,o.jsx)("span",{children:"Loading more stations..."})]})]})})}),(0,o.jsx)("div",{className:"absolute bottom-32 md:bottom-24 left-1/2 -translate-x-1/2 z-50 w-full md:px-4 md:w-auto",children:(0,o.jsx)(p.Zp,{className:"bg-background/95 backdrop-blur-sm border-none shadow-lg rounded-3xl max-w-[80vw] md:max-w-[400px] mx-auto",children:(0,o.jsxs)(p.Wu,{className:"flex flex-col gap-3 py-4 px-6",children:[(0,o.jsx)("div",{className:"w-full overflow-hidden",children:(0,o.jsx)("div",{className:"flex items-center gap-0.5 overflow-x-auto scrollbar-hide pb-1 -mx-3 px-3",style:{scrollbarWidth:"none",msOverflowStyle:"none"},children:H.map(e=>(0,o.jsx)(c.$,{variant:D===e?"default":"ghost",size:"sm",onClick:()=>L(e),className:`flex-shrink-0 h-6 px-1.5 text-xs rounded-full whitespace-nowrap min-w-0 ${D===e?"bg-foreground text-background hover:bg-foreground
494/90":"hover:bg-foreground/10"}`,children:"All"===e?(0,o.jsx)(n.A,{className:"h-3 w-3"}):(0,o.jsx)("span",{className:"text-xs",children:e})},e))})}),(0,o.jsxs)("div",{className:"flex items-center gap-3",children:[N?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("div",{className:"bg-gray-100 rounded-lg p-2 flex-shrink-0",children:N.favicon?(0,o.jsx)("img",{src:function(e){if(e)return e.replace(/^http:\/\//i,"https://")}(N.favicon),alt:N.name,className:"w-4 h-4 object-contain",onError:e=>{e.target.src="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTIgMTVDMTMuNjU2OSAxNSAxNSAxMy42NTY5IDE1IDEyQzE1IDEwLjM0MzEgMTMuNjU2OSA5IDEyIDlDMTAuMzQzMSA5IDkgMTAuMzQzMSA5IDEyQzkgMTMuNjU2OSAxMC4zNDMxIDE1IDEyIDE1WiIgZmlsbD0iIzY0NzQ4QiIvPjwvc3ZnPg=="}}):(0,o.jsx)("div",{className:"w-4 h-4 rounded-full bg-gray-400"})}),(0,o.jsxs)("div",{className:"flex-1",children:[(0,o.jsx)("p",{className:"font-medium text-sm",children:N.name}),(0,o.jsx)("p",{className:"text-xs text-muted-foreground",children:N.country})]})]}):(0,o.jsx)("div",{className:"flex-1",children:(0,o.jsx)("p",{className:"text-sm text-muted-foreground",children:"Select a station"})}),(0,o.jsxs)("div",{className:"flex items-center gap-1",children:[(0,o.jsx)(c.$,{variant:"ghost",size:"icon",onClick:Y,disabled:0===P.length,className:"hover:bg-transparent flex-shrink-0",title:"Random station",children:(0,o.jsx)(d.A,{className:"h-4 w-4"})}),(0,o.jsx)(c.$,{variant:"ghost",size:"icon",onClick:K,disabled:!N,className:"hover:bg-transparent flex-shrink-0",children:"loading"===M?(0,o.jsx)(a.A,{className:"h-5 w-5 animate-spin"}):S?(0,o.jsx)(l.A,{className:"h-5 w-5"}):(0,o.jsx)(i.A,{className:"h-5 w-5"})})]})]})]})})}),(0,o.jsx)("audio",{ref:A,className:"hidden",children:(0,o.jsx)("track",{kind:"captions"})})]})}let k=s.memo(function(e){let{initialStations:t}=e;return(0,o.jsx)(x,{initialStations:t})})},97003:(e,t,r)=>{"use strict";r.d(t,{$:()=>d,r:()=>i});var o=r(95155),s=r(12115),n=r(32467),a=r(83101),l=r(25016);let i=(0,a.F)("inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-[color,background-color,border-color,transform] duration-150 ease-out-strong active:scale-[0.97] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90",destructive:"bg-destructive text-destructive-foreground hover:bg-destructive/90",outline:"border border-input bg-background hover:bg-accent hover:text-accent-foreground",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-10 px-4 py-2",sm:"h-9 rounded-md px-3",lg:"h-11 rounded-md px-8",icon:"h-10 w-10"}},defaultVariants:{variant:"default",size:"default"}}),d=s.forwardRef((e,t)=>{let{className:r,variant:s,size:a,asChild:d=!1,...c}=e,p=d?n.DX:"button";return(0,o.jsx)(p,{className:(0,l.cn)(i({variant:s,size:a,className:r})),ref:t,...c})});d.displayName="Button"}}]);

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.